您的位置:首页 > 其它

Mybitis使用过程中常见问题整理笔记

2017-06-09 00:00 841 查看
1.关于<foreach/>批量处理

1.单参数List的类型:
<select id="foreachTest" resultType="upperCaseKeyMap">
select * from testTable where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

2.单参数array数组的类型:
<select id="foreachTest2"  resultType="upperCaseKeyMap">
select * from testTable where id in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

例如:针对oracle的批量添加:
<insert id="addTestTableInfo" parameterType="list">
INSERT INTO testTable (num_id,count)
SELECT SEQ_TESTTABLE_ID.NEXTVAL, A.* FROM(
<foreach collection="testTableInfo" item="item" index="index"  separator="union all">
SELECT #{item.count} FROM dual
</foreach>
) A
</insert>

2.针对插入并返回当前数据的ID:

//在insert最后加上下面的就可以返回ID
<selectKey  resultType="java.lang.String" keyProperty="NUM_ID">
select SEQ_T_TEST_TABLE.Currval as NUM_ID from dual
</selectKey>

3.针对特殊字符的转义

1、特殊字符
xml 中表示:   <= 小于等于、    >= 大于等于
使用的时需加上这样的标记:<![CDATA[   ]]>

2、一些特殊字符也可用下面的替代符号所代替。
特殊字符   替代符号
&            &
<            <
>            >
"            "
'            '

4.$与#的区别

select * from T_PRINT_LAYOUT where  D_RECID = ${recId}
最后生成的SQL为: select * from T_PRINT_LAYOUT where  D_RECID = 1
即:直接将参数值替换到了原来${recId}的位置,相当于硬拼SQL

select * from T_PRINT_LAYOUT where  D_RECID = #{recid,jdbcType=DECIMAL}
最后生成的SQL为:select * from T_PRINT_LAYOUT where  D_RECID = ?
即:#{...}被识别为一个SQL参数
注:使用#,不写jdbcType,为空时,会报错,写了则不会。
场景(标配oracle):
1.like 使用:
like '%'||#{NAME}||'%'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息