(三)Mybatis总结之动态sql

动态sql

为何需要动态sql?因为简单的sql语句已经不能满足复杂的业务需求

动态sql相当于sql语句拼接

1.if语句

if语句:判断,如果执行多条件查询,如果中间某个条件变量为空,就跳过当前判断(包括if里面的sql语句),执行下一条语句。

栗子如下:

  
  
  
  

2.if+where不定向查询

if+where语句:where标签里面如果包含了标签中的返回值的话(只要有if的条件不为空),它就插入一个where。如果if标签里面是以and或者or开头,则它(and和or)会被剔除。语法如下:

    Select * from 表名
         
            
                and/or 列名=#{取值}
            
             ……
         

栗子:

   

3.if+set不定向修改

if+set语句:一般用于修改语句,如果第一个条件为空,则添加第二个条件。如果第一个条件不为空,第二个条件为空,则添加第一个条件,如果两个条件都不为空,则两个条件都添加语法如下:

        Update tablename 
            
                
                    tab.列1=#{值1},
                
                
                    tab.列2=#{值2},
                
            
        where id = #{id}

栗子:

    
         UPDATE user
             
                 
                    name = #{name},
                 
                 
                    age = #{age},
                 
             
        where id = #{id}
    

4.choose-when-otherwise

choose-when-otherwise:有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java的switch语句。语法如下所示:


Select * from user
    
        
            
                 列1 = #{值1}
            
            
                 列2 = #{值2}
            
            
                 列3 = #{值3}
            
            
                 And 列4 = #{值4}
            
        
    
 

3选1的栗子:

select * from user
  
      
          
              id=#{id}
          
          
              and username=#{username}
          
          
              and sex=#{sex}
          
      
    

5.trim 语句
  • trim内含属性
    • prefix:加上前缀
    • prefixOverrides:去掉一个and或者or
    • suffixOverrides=",":去掉最后一个,,也可以去掉其他东西。

语法如下:


    
      and username=#{username}
    
    
      and sex=#{sex}
    

栗子:用trim改修语句


 
                        
                        
    
        update user 
            
                
                    username = #{username},
                
                
                    sex = #{sex},
                
            
         where id=#{id}
    

6.sql片段

使用场景:有时候可能某个sql 语句用的特别多,为了增加代码的重用性,简化代码,需要将这些代码抽取出来,然后使用时直接调用。

栗子:


 
        
            name = #{name},
        
        
            age = #{age},
        
 


 
        UPDATE USER
        
            
            
            
        
        id = #{id}
 

7.foreach语句

使用场景:需要一次性查询id为1,2,3,4的用户

栗子:


  • collection:指定输入对象中的集合属性
  • item:每次遍历生成的对象
  • open:开始遍历时的拼接字符串
  • close:结束时拼接的字符串
  • separator:遍历对象之间需要拼接的字符串

欢迎各位大佬指点!

转载于:https://www.cnblogs.com/qiyiguoandqijiguo/p/10834821.html

你可能感兴趣的:(java)