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
如果可以在其中使用${...}
,那就是这样。
答案 0 :(得分: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>
所以我会在那里使用$ {...},这应该让我在那里。
答案 1 :(得分:1)
在我的项目中,我们有一个非常简单的解决方案。
我们在数据对象中有一个名为TABLENAME的字符串。 当我们构造对象时,我们初始化表名。 在sqls中我们有tablename enquoutet。
DataObject中的:
String TABLENAME;
public String getTABLENAME() {return TABLENAME;}
public void setTABLENAME(String tablename) {this.TABLENAME = TABLENAME;}
在sqls中:
<delete id="simpleDelete" parameterClass="Integer">
delete from ${jdbc.schema}.$TABLENAME$
WHERE ID = #ID#
</delete>
我不知道这是否是最好的解决方案,但效果很好。我愿意接受更好的解决方案。
答案 2 :(得分:0)
由于<sql>
无法满足此目的,我填写了一个功能请求。
http://code.google.com/p/mybatis/issues/detail?id=627