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(错误)(需要加上引号)

 模糊查询

四种方法,人选一个即可

原文地址:https://www.cnblogs.com/Zs-book1/p/10990693.html