mybatis动态sql语句
if和where
使用动态sql语句:
where内可以有多个if语句,也可以使用choose标签来表示:
两种方法效果相同,都表示条件选择。
set语句:
注意如果set中的条件一个都不成里的话,会报错。
where 可以使用trim条件替代:
<trim prefix="where" prefixOverrides="and |or">
...
</trim>
prefifixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)。它的作用是移除所有指定在
prefifixOverrides 属性中的内容,并且插入 prefifix 属性中指定的内容。
set也可以使用trim替换,
foreach语句:
应用场景:查询、批量数据操作(录入,删除,修改);
简介:foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束。
foreach的时候最关键的也是最容易出错的就是collection属性
1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,也可以传递单参数。item代表value,index代表key;
批量录入:
批量更新:
方案一:模拟mysql中批量处理sql语句
注意要在mysql连接的url后添加批处理语句,不然会报错:
allowMultiQueries=true,表示允许批量操作
测试方法:
方案二:利用case语句
update emp set ename=case empno when 1 then 'name1' when 2 then 'name2' when 3 then 'name3' end,sal=case empno when 1 then 'sal1' when 2 then 'sal2' when 3 then 'sal3' end where empno in (1,2,3)
mapper映射:
批量删除
与插入语法类似
delete from emp where empno in(1,2,3)
#{}与${}的区别
相同点:都可以作为参数在sql语句中使用
不同点:
#{} 会对传入的数据进行转码处理,在预编译的时候当作?处理;避免sql注入查询命令如下:
select * from emp WHERE ename =?
---------------------------------------------------------------
${} 将数据以字符串的形式原封不动的传入sql命令中,一般在用到列名,表名的时候使用; 查询命令如下:
select * from emp WHERE ename =zhangsan(错误)(需要加上引号)
模糊查询
四种方法,人选一个即可