0

MyBatis 3.1.1 允许 #{...} 用于准备好的语句参数,或 ${...} 用于每次替换。

我遗漏了一些允许对 SQL 语句的部分进行参数化但仍保持其准备好的语句的东西;即在配置期间更换。

我怎样才能做到这一点?也许使用一些 SQL 片段?

更新:

我发现:

<sql id="userColumns"> id,username,password </sql>
<select id="selectUsers" parameterType="int" resultType="hashmap">
    SELECT <include refid="userColumns"/> some_table WHERE id = #{id}
</select>

请参阅http://www.mybatis.org/core/sqlmap-xml.html#sql 如果${...}可以在其中使用,那就是它。

4

3 回答 3

1

在我的项目中,我们为这种情况提供了一个非常简单的解决方案。

我们在数据对象中有一个名为 TABLENAME 的字符串。当我们构造对象时,我们初始化表名。在 sqls 中,我们有表名 enquoutet。

在数据对象中:

String TABLENAME;
public String getTABLENAME() {return TABLENAME;}
public void setTABLENAME(String tablename) {this.TABLENAME = TABLENAME;}

在 sql 中:

<delete id="simpleDelete" parameterClass="Integer">
    delete from ${jdbc.schema}.$TABLENAME$ 
    WHERE ID = #ID#
</delete>

我不知道这是否是最好的解决方案,但效果很好。我愿意寻求更好的解决方案。

于 2012-07-27T08:09:05.973 回答
1

我想我找到了...

<sql id="userColumns"> id,username,password </sql>

接着

<select id="selectUsers" parameterType="int" resultType="hashmap">
    SELECT <include refid="userColumns"/>
    FROM some_table
    WHERE id = #{id}
</select>

所以我将在其中使用 ${...} ,这应该可以让我到达那里。

http://www.mybatis.org/core/sqlmap-xml.html#sql

于 2012-07-16T00:54:50.400 回答
0

由于<sql>不能按此目的工作,我填写了一个功能请求。 http://code.google.com/p/mybatis/issues/detail?id=627

于 2012-07-16T01:52:15.673 回答