cnflat0 2020-04-17
《 if》标签 用于进行条件判断,test 属性用于指定判断条件,当满足判断条件,才可以拼接《if》标签里的sql。
为了满足select语句的拼接条件, 在 SQL 语句后强行添加where 1=1 的恒成立条件;
如图所示,mapper标签里, 加入《select》,《 select》标签里再用《if》标签做判断;
如果不想用拼接where 1=1 , 还可以加<where><where/>标签;
《where》标签 用于管理 where 子句.有如下功能:
《where》标签会自动帮我们在SQL语句中添加或取消where子句(如果一个参数都没有那么where子句取消), 也会自动去除and;
when标签中的test标签相当于switch
when相当于 case
otherwise 相当于 default
<set>标签用于维护update中的set子句;
测试类中, 获取接口的对象, 调用接口的实现方法updUser();
trim标签有4个属性: prefix、prefixOverrides……
<where>标签和<set>标签其实都是由trim标签演变而来;
当我们从前面添加了set, 从前面删除了user,从后面添加了hahaha,从后面删除了‘逗号,’ ,我们现在看一看测试类中调用本方法, 然后通过DEBUG的日志级别, 打印在console上的信息:
从这里我们也可以看到,当我们在mybatis中调用#{}而不是${}取参数时,mybatis底层对调用PreparedStatement,将参数先当成占位符处理。
所以使用#{}可以有效避免sql注入问题,而使用${}不可以。
《bind》标签一般用于模糊查询,它是对传进来的参数数据进行再处理的;
由于是模糊查询,上图出现了一处错误,你能找到吗?
这个时候,#{username}取出的username就不是简简单单的username的值了,而是加了两个%的值;
《forech》标签是动态SQL查询中,迭代一个集合的必要操作,通常和IN条件一起使用;
举例:select * from employeesTable where id in(1,2,3,4),
把IN条件的元素(1,2,3,4)封装成一个list集合,然后把集合作为参数传入。
测试这个方法的结果:
复用时用的;