foreach踩过的坑:
当集合为null或者集合的长度为0时,就会形成不符合语法的sql语句,执行出错。mybatis批量操作前得判断集合是否为空。
根据表名参数从不同的表里查询数据:
表名sql拼接,不支持 # 预编译拼接,只能使用 $ 拼接sql。
向mybatis传递一个String类型的字符串(不使用@Param注解):
xml语句里面使用#{_parameter},认为_parameter是mybatis的一个关键字。
mybatis的if标签字符串判断:
<if test = 'attr== "value"'> //外层单引号,内层双引号
<if test="sex=='Y'.toString()"> //外层双引号,内层单引号,需要使用toString()。
Oracle批量插入踩过的坑:
如果插入一条数据:insert into tablename (col1,col2) values (v1,v2),没有问题。
批量插入语句 insert into tablename (col1,col2) values (v11,v12),(v21,v22),却会报错,sqlserver、mysql能识别此语句。
Oracle批量插入的正确方式(同样是用于插入一条语句):
①:去掉 "values"关键字
②:使用dual表查询和union all关键字:
insert into tablename (col1,col2) select v11,v12 from dual union all v21,v22 from dual
Oracle递归查询:
where用于 过滤 递归查询的结果,写在start with的前面。
concat函数:
mysql可以支持两个和两个以上个数的参数,Oracle只支持两个参数,如果有多个拼接串,可以嵌套使用concat函数。
Mybatis&Oracle批量更新数据:
<update id="updateDatas" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
update tableName
set
colName = #{item.property,jdbcType=VARCHAR} (最后一个别带逗号)
where colName = #{item.id,jdbcType=VARCHAR}
</foreach>
</update>
返回结果并不是受影响的行数。