mybatis动态sql语句

本文深入探讨MyBatis框架中动态SQL的多种应用方式,包括if、choose、trim、foreach等标签的使用技巧,以及#{}
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值