MyBatis涉及的动态SQL

动态 SQL 提供了更大的灵活性和可重用性,可以根据不同情况生成不同的 SQL 语句,从而满足应用程序的需求。它简化了数据库操作的编写和管理,提高了开发效率和代码的可维护性。

用于条件判断,根据条件决定是否包含某个SQL片段。



    
        insert into userinfo(id,
                            
                                name,
                            
                             age) values(#{id},
                                          
                                              #{name},
                                          
                                          #{age})
    

提供了一种灵活的方式来去除或添加 SQL 片段的开头或结尾。


  SQL statement or fragment

 MyBatis涉及的动态SQL_第1张图片

可以看出trim有四个属性

  • prefix,suffix 添加前缀和后缀;
  • prefixOverrides:去掉前缀;suffixOverrides:去掉后缀
   
        insert into userinfo
        
            
                id,
            
            
                name,
            

            
                age,
            
            
                email,
            

         values
    
        
            #{id},
        
        
            #{name},
        

        
            #{age},
        
        
            #{email},
        

    

    


需要搭配 使用;

需要删除前面的and;

语句中没有内容的话就不会生成where sql关键字

 
    
    
 
    @Test
    void getListByParam() {
        List list=userMapper.getListByParam("John",1);//select* from userinfo WHERE name=? and id=?
        List list1=userMapper.getListByParam("John",null);// select* from userinfo WHERE name=?
        List list2=userMapper.getListByParam(null,1);//select* from userinfo WHERE id=?
        List list3=userMapper.getListByParam(null,null);//select* from userinfo
    }

进行单元测试的时候,当输入null参数,if是null的话就没有where后面的sql语句

用于动态生成 UPDATE 语句的标签。 

在 UPDATE 语句中,我们通常需要根据条件更新表中的某些列。 标签可以帮助我们只更新指定的列,避免全表更新,提高性能和减少网络传输量。

下面是一个使用 标签的示例:

  • 配合if使用;
  • 会自动去除最后一个逗号


  UPDATE user
  
    
      username = #{username},
    
    
      password = #{password},
    
    
      email = #{email},
    
  
  WHERE id = #{id}

在这个示例中,`` 标签包含了多个 `` 标签。每个 `` 标签表示一个条件,如果条件成立,则生成对应的列更新语句。

最终生成的 SQL 语句会根据实际情况只更新存在值的列,而不会更新为 `null` 的列。

需要注意的是,在生成的 SQL 语句中,最后一个列名后面没有逗号,这是通过在 `` 标签中添加逗号来实现的。

MyBatis涉及的动态SQL_第2张图片

item:指定在循环体内每个元素的别名。
index:指定在循环体内每个元素的索引(即下标)。
collection:指定要遍历的集合或数组对象。
open:指定循环体前要添加的字符。
close:指定循环体后要添加的字符。
separator:指定每个元素之间要添加的分隔符。

         
        delete from userinfo where id in
        
            #{id}
         
    

你可能感兴趣的:(Java,JavaEE,mybatis,sql,java)