mybatis之动态sql

mybatis之动态sql

1、where -if标签

mapper接口:

  List selectBookList(BookEntity book);

xml配置文件:

    

当传参book中的name!=null时,sql会加上where name=#{name}

desctiption!=-null时,sql会加上description=#{description}

如果name和description都为null,sql变为select * from books

2、set-if标签

    
        update books
 
        
   

            
                name=#{name},
            
        
            description=#{description},
        
            
            
                price=#{price},
            
        
        
        where id=#{id}
    

更新id为为#{id}的书的name(如果传参中name不为空),description(如果传参中description不为空),price(如果传参price<=100)

3、trim标签

使用trim标签控制条件部分两端是否包含某些字符

  • prefix属性:指定要动态添加的前缀
  • suffix属性:指定要动态添加的后缀
  • prefixOverrides属性:指定要动态去掉的前缀,使用“|”分隔有可能的多个值
  • suffixOverrides属性:指定要动态去掉的后缀,使用“|”分隔有可能的多个值
    

4、choose/when/otherwise标签

在多个分支条件中,仅执行一个。

  • 从上到下依次执行条件判断
  • 遇到的第一个满足条件的分支会被采纳
  • 被采纳分支后面的分支都将不被考虑
  • 如果所有的when分支都不满足,那么就执行otherwise分支


最好补一个where 1=1,否则如果都不成立,sql语句就变成了 select emp_id,emp_name,emp_salary from t_emp where

5、foreach标签

  • collection属性:要遍历的集合

  • item属性:遍历集合的过程中能得到每一个具体对象,在item属性中设置一个名字,将来通过这个名字引用遍历出来的对象

  • separator属性:指定当foreach标签的标签体重复拼接字符串时,各个标签体字符串之间的分隔符

  • open属性:指定整个循环把字符串拼好后,字符串整体的前面要添加的字符串

  • close属性:指定整个循环把字符串拼好后,字符串整体的后面要添加的字符串

  • index属性:这里起一个名字,便于后面引用

    ​ 遍历List集合,这里能够得到List集合的索引值

    ​ 遍历Map集合,这里能够得到Map集合的key

示例sql:select * from books where id in (1,2,3);

mapper接口:

List selectBookList(int [] ids);

xml配置文件:

    

注:

关于foreach标签的collection属性

如果没有给接口中List类型的参数使用@Param注解指定一个具体的名字,那么在collection属性中默认可以使用collection或list来引用这个list集合。这一点可以通过异常信息看出来:

Parameter 'empList' not found. Available parameters are [collection, list]

在实际开发中,为了避免隐晦的表达造成一定的误会,建议使用@Param注解明确声明变量的名称,然后在foreach标签的collection属性中按照@Param注解指定的名称来引用传入的参数。

批量更新:

实现批量更新则需要多条SQL语句拼起来,用分号分开。也就是一次性发送多条SQL语句让数据库执行



  
    
        update t_emp set emp_name=#{emp.empName} where emp_id=#{emp.empId}
    

6、sql标签

1、抽取重复的SQL片段

    
    <sql id="mySelectSql">
        select emp_id,emp_name,emp_age,emp_salary,emp_gender from t_emp
    sql>

2、引用已抽取的SQL片段

        
        <include refid="mySelectSql"/>

你可能感兴趣的:(#,Mybatis,mybatis,sql,数据库)