动态SQL

动态sql概述

Mybatis框架的动态sql技术是一种根据特定条件拼接sql语句的功能,为了解决拼接sql语句字符串时的问题
比如在页面中的复选框,文本框,单选框等等是否作查询或者选择,浏览器在传递给服务器时,有可能的值为null或者" "…此时在做sql语句拼接的时候就需要处理

如果姓名文本框中没有数据则传递的是null,在传递数据时的sql语句就需要拼接字符串,此时姓名的if name = … 则未被拼接在sql语句当中

if标签

通过test属性中的表达式判断标签中的内容是否有效(是否会拼接到SQL中)

  
    

 where


1、若where标签中有条件成立,会自动生成一个where关键字进行拼接

2、会自动将where标签中内容前多余的and去掉,但是不会加and,所以在第一个if之后的语句都要加and。也不会将内容后的and去掉

3、如果没有任何一个条件成立,则where没有任何功能,即不会生成where关键字


 trim

prefix,suffix:在整个标签内容前面或后面添加指定的内容
prefixOverrides,suffixOverrides:在标签中内容前面或后面添加指定的内容



choose、when、otherwise

例如
choose: when(){}
        when(){}
        when(){}
        otherwise(){}
相当于java中的if(){}
             else if(){}
             else if(){}
             else{}
when至少设置一个,otherwise做多设置一个
即只要一个条件满足,后面的条件就不会再判断了


    
    

 foreach

  1. collection:设置要循环的数组或集合
  2. item:用一个字符串表示数组或集合中的每一个数据
  3. separator:设置每次循环的数据之间的分隔符
  4. open:循环体之前以什么开始
  5. close:循环体之后以什么结束

遍历集合和数组




    insert into emp values
    
        (null,#{emp.empName},#{emp.age},#{emp.gender},null)
    




    delete from emp where emp_id in
    
        #{empId}
    




    delete from emp where
    
        emp_id = #{empId}
    

批量添加

  1. 创捷mapper接口方法
 /**
     * 批量添加Emp数据
     * @param emps
     */
    void insertEmpByForeach(@Param("emps") List emps);
  1. 配置insert标签的映射文件
 
    
        insert into emp values
        
            (null,#{emp.empName},#{emp.age},#{emp.gender},null)
        
    

 sql片段

可以记录一段sql,在需要用的地方使用include标签进行引用


    emp_id,emp_name,age,gender,dept_id



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