一、啥是动态操作sql
还是用之前我们的员工管理系统打比方,假设我现在的需求是:不只是完全把姓名、性别、入职时间都输入才能查到信息,我希望只输入姓名的话就根据姓名返回信息,只输入性别的话就根据性别返回信息,只输入入职时间的话就根据这个返回,输入哪个信息就根据哪个信息查询
可是我们sql语句里已经写死了条件啊,少一个条件就会报错
这时就要用到【动态sql】,Mybatis提供了【动态sql】的方法,不单单是动态的设置参数值,还能动态地修改条件
这里我就要道个歉了,上一篇我说XML映射文件没用,非也,就是XML映射文件才提供了动态sql地语法
二、XML映射文件里动态sql
1、if语法
那么我们要实现那个【输入哪个信息就根据哪个信息查询】功能,就能想到 if条件判断
if(有“姓名”的值传回),那就在where后面接上name的查询条件
if(有“性别”的值传回),那就在where后面接上gender的查询条件
......
if(啥值都没有传回),那就后面连where也不需要了,直接select * from emp order by update_time desc;就够了
那么在XML实现这些语法就是由它提供的<where></where>、<set></set>跟<if test="..."></if>标签
<where></where>的作用:
1、它是针对【select】的查询语句有用的标签
2、动态根据if判断条件符不符合,如果都不符合,sql语句就没必要带个where,自动不显示
3、如果前一个if不符合条件而后一个符合,那么自动检查到符合条件的那个sql部分,把“and”去掉。
比如案例里不传name值,但是有gender,就会变成select * from emp where