Mybatis动态查询
mybatis 中的动态查询
??
多条件的查询
if
if 根据标签中test的属性所对应的表达式决定标签中的内容是否拼接到sql语句中
上面的where后面的 1=1 是细节,因为当where后面的条件都为空时就成了 select * from t_user where
显然这种sql语句是有问题的,还有一种情况就是当userName为null时语句就成了 select * from t_user where and age=#{age}
这也是错的,所以在where后加一个恒成立的条件不仅不会影响查询结果,而且没有会在特定情况时sql语句是会报错的所以很有必要
where
where 当where标签中有内容时,会自动生成where关键字,并且将内容前多余的and 或者or去掉
当where中没有内容时,此时where标签没有任何效果 就是不会生成关键字注意:在写条件时不能在后面加and or 这个在下一条语句无效时mybatis不会帮你去掉!
trim
- prifix|suffix : 将trim标签中在内容前面或后面添加指定内容
- suffixOverrides|prefixOverrides: 将trim标签中内容前面或后面去掉指定内容
choose when otherwise
相当于 if else
- choose:用于包when otherwise
- when: 相当于if
- otherwise: else
foreach
一个案例 -->就是当我们需要批量删除一些东西时(参数以数组的形式传入)
delete from t_user where id in
(
#{id}
)
- collection 是需要遍历的集合
- item 代表当前的
- separator 分隔
- open 以什么开始,在上面案例中的括号可以 open="(" 这样写
- close 以什么结束,在上面案例中的括号可以 open=")" 这样写
delete from t_user where id in
id = #{id}
sql
sql 片段: 在我们的查询语句不能在实际开发中也一直写 *;因为我们要按需查找,不必将不需要的也查询出来,我们可以将我们平常查询次数较多的字段
放在sql片段内,可以在需要查询时直接进行引用!
id,dept_name