MyBatis的动态sql语句
sql语句是根据查询条件动态的变化
mybatis提供一些动态sql的标签
常用的动态sql标签:
IF标签使用
如果查询条件不为空则按照查询条件查询。(可以使用多个IF标签,当IF标签满足时添加where条件)
可以满足多个条件
语法:
<if test="条件语句"> </if>
举个例子:如果name查询条件不为空则根据name查询,否则查询所有
(1)dao接口
public interface StudentDao { //如果name查询条件不为空,则根据name查询,如果为空则查询所有 public List<Student> select(String name); }
(2)mapper文件内容
(3)效果展示
①当我输入一个不为空的name查询时结果:
②当我输入一个空字符串name查询时结果:
根据日志中发现查询的结果为查询所有学生。
choose标签使用
当多个<when>标签中满足最先匹配的一个时,则不再继续匹配,如果所有的<when>都不匹配时,则匹配<otherwise>
最多只能匹配一个条件
语法:
<choose> <when test=""> </when> <when test=""> </when> ............. <otherwise> </otherwise> </choose>
举个例子:如果name不为空则按照name查询,如果age不为空则按照age查询,如果都为空则默认profession查询
(1)dao接口
public interface StudentDao {
public List<Student> selectByNameOrAge(@Param("name") String name,@Param("age") Integer age); }
(2)mapper文件
效果展示:
①如果name和age不为空时:
name和age不为空,但是执行到第一个<when>时由于name不为空所以根据name查询。
②如果name为空,但age不为空时:
③当name和age都为空时:
where标签使用
上面都使用where 1=1 使用where标签。作用:添加where关键字并且会去除第一个and或or
举个例子:
mapper文件内容:
效果展示:
如果name不为空,age为空时:
如果name和age不为空时:
foreach标签使用
foreach标签循环标签,批量操作,比如批量删除,批量添加
举个例子:批量删除操作
(1)dao接口内容
public interface StudentDao { //由于集合数组在mybatis中会出现默认的名字。 //所以一般推荐起别名 public int deleteByIds(@Param("ids") Integer[] ids); }
(2)mapper文件内容
(3)测试:
标签:语句,name,标签,age,查询,sql,动态,public,不为 From: https://www.cnblogs.com/gzyhrc/p/17997675