MyBatis--4(动态SQL相关知识)

1.动态SQL

  • 随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL
  • mybatis中的动态查询都是用多个标签构成

2.

  1. :用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL
  • 例:

   name like concat('%',#{name},'%')

  • 示例:

  • 但是上述代码有个缺点,就是不能动态生成where,andor等关键字,会造成语法错误
  1. : where元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的ANDOR
  • 改进:
   select *
        from emp
        
            
        
            name like concat('%', #{name}, '%')
        
        
            and gender = #{gender}
        
        
            and entrydate between #{begin} and #{end}
        
        
        order by update_time desc
    
  1. 替换set关键字,并且去除多个赋值语句之间间隔的逗号(用在update语句中)。
  • 在xml文件中示例:
    
        update emp
        
            username = #{username},
            name = #{name},
            gender = #{gender },
            image = #{image},
            job = #{job},
            entrydate = #{entryDate},
            dept_id = #{deptId},
            update_time = #{updateTime}
        
           where id = #{id}
    

3.

  1. SQL语句
delete from emp where id in (1,2,3);
  1. 接口方法
//批量删除
public void deleteBylds(List ids);
  1. XML映射文件
  
    
    
        delete from emp where id in
        
            #{id}
        
    

4.,

  1. 这两个标签解决了代码复用性的问题,类似于方法的定义与调用
  • 原select语句(对比)

  1. 抽取大量且复用多的sql语句
 
 
        select id,username, password,name, gender,image,job,entrydate,dept_id,create_time,update_time
		from emp
    
  1. 使用复用代码


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