mybatis里的页面的if标签怎么用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis里的页面的if标签怎么用相关的知识,希望对你有一定的参考价值。

参考技术A [html]
view
plain
copy
如果
userqueryvo中传入查询条件,再进行sql拼接
test中usercustom.username表示从userqueryvo读取属性值
and
username
like
'%$usercustom.username%'
and
sex
=
#usercustom.sex
根据id集合查询用户信息
最终拼接的效果:
select
id
,username
,birthday
from
user
where
username
like
'%小明%'
and
id
in
(16,22,25)
collection:集合的属性
open:开始循环拼接的串
close:结束循环拼接的串
item:每次循环取到的对象
separator:每两次循环中间拼接的串
#id
select
id
,username
,birthday
from
user
where
username
like
'%小明%'
and
(id
=
16
or
id
=
22
or
id
=
25)
<foreach
collection="ids"
open="
and
(
"
close=")"
item="id"
separator="or">
id
=
#id

还有很的查询条件
[html]
view
plain
copy
select
id,username,birthday
from
user
where标签相当
于where关键字,可以自动去除第一个and
引用sql片段,如果sql片段和引用处不在同一个mapper必须前边加namespace
下边还有很其它的条件
<include
refid="其它的sql片段">

MyBatis—07—DQL: 动态SQL查询;


 

一、  <if>和<where>标签

 

《 if》标签 用于进行条件判断,test 属性用于指定判断条件,当满足判断条件,才可以拼接《if》标签里的sql。

为了满足select语句的拼接条件, 在 SQL 语句后强行添加where 1=1 的恒成立条件;

如图所示,mapper标签里, 加入《select》,《 select》标签里再用《if》标签做判断;

 

 

 如果不想用拼接where 1=1 , 还可以加<where><where/>标签;

   《where》标签 用于管理 where 子句.有如下功能:

  •  如果没有条件满足, 不会 生成 where 关键字。
  •  如果有条件满足, 会 添加 where 关键字
  •   如果第一个条件中有 and,会 √自动去除and。

《where》标签会自动帮我们在SQL语句中添加或取消where子句(如果一个参数都没有那么where子句取消), 也会自动去除and;

 

 

2、<choose><when><otherwise>标签

when标签中的test标签相当于switch

when相当于 case

otherwise 相当于 default

 

 

 

 

3、<set>标签

<set>标签用于维护update中的set子句;

 

 测试类中, 获取接口的对象, 调用接口的实现方法updUser();

 

 

4、<trim>标签

trim标签有4个属性: prefix、prefixOverrides……

<where>标签和<set>标签其实都是由trim标签演变而来;

 

 当我们从前面添加了set, 从前面删除了user,从后面添加了hahaha,从后面删除了‘逗号,’  ,我们现在看一看测试类中调用本方法, 然后通过DEBUG的日志级别, 打印在console上的信息:

从这里我们也可以看到,当我们在mybatis中调用#{}而不是${}取参数时,mybatis底层对调用PreparedStatement,将参数先当成占位符处理。

所以使用#{}可以有效避免sql注入问题,而使用${}不可以。

 

 

5、<bind>标签

《bind》标签一般用于模糊查询,它是对传进来的参数数据进行再处理的;

 

 由于是模糊查询,上图出现了一处错误,你能找到吗?

 

 这个时候,#{username}取出的username就不是简简单单的username的值了,而是加了两个%的值;

 

6、<foreach>标签

《forech》标签是动态SQL查询中,迭代一个集合的必要操作,通常和IN条件一起使用;

举例:select * from employeesTable where id in(1,2,3,4),

把IN条件的元素(1,2,3,4)封装成一个list集合,然后把集合作为参数传入。

 

 

 

 

 

 

 

 

  • foreach标签里,collection属性表示传过来的集合的名字,我们在接口中已经用注解让他叫‘list’了;
  • open属性表示以什么符号开始;
  • separator属性表示分隔符是什么;
  • close属性表示集合元素全部取完时,以什么符号结尾;
  • item属性表示集合中取到一个元素给他命名;

 

 

 测试这个方法的结果:

 

 

 

 

7、<sql><include>标签

复用时用的;

 

以上是关于mybatis里的页面的if标签怎么用的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis动态SQL单一基础类型参数用if标签

MyBatis—07—DQL: 动态SQL查询;

struts2的if标签用法

mybatis里if标签判断字符串相等不相等的问题

mybatis里if标签判断字符串相等不相等的有关问题

thinkphp中volist标签 增加if判断。