我打算制作一个片段,用于重复使用参数。
<insert ...>
<selectKey keyProperty="id" resultType="_long" order="BEFORE">
<choose>
<when test="_databaseId == 'derby'">
VALUES NEXT VALUE FOR SOME_ID_SEQ
</when>
<otherwise>
SELECT SOME_ID_SEQ.NEXTVAL FROM DUAL
</otherwise>
</choose>
</selectKey>
INSERT INTO ...
</insert>
我可以使用参数制作SQL片段吗?
<sql id="selectKeyFromSequence">
<selectKey keyProperty="id" resultType="_long" order="BEFORE">
<choose>
<when test="_databaseId == 'derby'">
VALUES NEXT VALUE FOR #{sequenceName}
</when>
<otherwise>
SELECT #{sequenceName}.NEXTVAL FROM DUAL
</otherwise>
</choose>
</selectKey>
</sql>
这样我可以像这样重用它们吗?
<insert ...>
<include refid="...selectKeyFromSequence"/> <!-- How can I pass a parameter? -->
INSERT INTO ...
</insert>
这可能吗?
答案 0 :(得分:12)
从版本3.3.0开始,您可以这样做:
<sql id="myinclude">
from ${myproperty}
</sql>
<include refid="myinclude">
<property name="myproperty" value="tablename"/>
</include>
中的SQL部分
答案 1 :(得分:2)
您无法将参数传递给代码。有类似的SO question,iBatis issue和MyBatis issue。
包括在解析xmls时的内联,因此不存在 一旦启动过程完成(从MyBatis问题),他们自己。
但是,您可以在标签内使用变量。您不将其作为参数传递,但可以将其作为参数提供给具有include标记的函数。您需要在所有函数中使用相同的变量名称,即#{sequenceName}
。