动态sql语句

动态sql语句标签:
bind
choose
foreach
if
include
set
trim
where

where标签
需要根据条件进行判断查询,此时则需要执行动态的sql语句。
问题描述:
假如映射文件配置接口方法,需要插入一个参数为Employee对象。我们需要根据对象中的某些条件,来执行对应的sql语句。如下表为一个emploee对象的数据库字段和数据,假如我们需要查询出emploee中的字段。如果id不为空,则查询条件要加上id属性。如果姓名不为空,则查询条件需要加上姓名。如果年龄不为空,则需要叫上年龄作为条件查询。
id name age
1 zs 18
2 ls 16
3 ww 23

解决办法:显然,我们需要通过动态的拼接sql语句进行执行。
Mybatis提供了if功能,允许动态的sql功能。 


看上述代码。通过if动态的拼接sql语句,即可按照条件执行动态的sql语句。但是我们会发现一个问题。假如第三个条件不满足,显然此时的sql语句的结尾会多一个and。这样动态的拼接sql语句显然会很麻烦。
于是,Mybatis便提供了一种方法。通过 where标签。可以帮助我们自动的截取掉多余的and。

if标签


如上述情况。当sql语句前边有多余的and时,where会帮助我们自动的截取掉多余的and。(注意,只能截取前边多余的and,不能截取后边多余的and)。
但是问题又来了。假如三种条件都不满足。那么查询的sql语句便多了一个where字段。此时需要通过另外一种方式。

trim标签


通过trim标签进行字符串的截取。
trim的标签

标签    说明
prefix    (智能的添加)可以动态的添加where
prefixOverrides    (智能的去掉)去除前边的多余的字符。可以去掉此案例中前边多余的and
suffix    添加一个后缀,与prefix相对
suffixOverrides    去除后边多余的字符,与prefixOverrides相对
foreach标签
假如需要查询SQL语句:
select * from employee id IN (1,2,3,4,5。。。)
此时我们传入的参数是一个list集合(集合的元素中值为1,2,3,4,5.。。。)。显然的集合中有多少个元素我们不知道,但是需要遍历集合中所有的元素进行查询。
此时就需要用到foreach进行集合的遍历。

foreach标签

标签    说明
item    为每次从集合中取到的值设置一个变量名
index    若集合为map类型的时候,则index表示索引下标
open    表示sql语句以什么开始,即加上前缀
close    与open的作用相对
separator    表示每次遍历集合中的元素以什么分隔
choose标签
可以替代上述的if进行条件判断。其中when表示判断if。另外choose的otherwise标签可表示else的功能。

set标签
主要用于更新操作,替代set字段。与上述的where标签作用类似。

bind标签
基本不用,做模糊查询的时候使用,加入模糊查询%a%。此时可以将a通过bind标签绑定为一个变量temp,此时sql语句中,就可以通过temp表示%a%。

include标签
需要通过和sql标签配合使用。
sql标签是在select同级别下使用。可以将一个常用的sql语句,表示为一个变量。
include则在动态sql语句中,通过include标签即可导入sql标签的sql语句。

注:mybatis的动态sql中,支持静态方法,方法,构造器,运算符的使用。与java代码的操作基本大致相似
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值