动态sql语句

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)测试:

 

posted @ 2024-02-03 21:51  和哗  阅读(22)  评论(0编辑  收藏  举报