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