Mybatis之动态SQL

Mybatis之动态SQL,第1张

Mybatis之动态SQL

我们发现写的 SQL 语句都比较简单,如果有比较复杂的业务,我们需要写复杂的 SQL 语句,往往需要拼接,而拼接 SQL ,稍微不注意,由于引号,空格等缺失可能都会导致错误。

  那么怎么去解决这个问题呢?这就是本篇所讲的使用 mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。

我对动态SQL的理解就是根据不同条件下生成的SQL就叫动态SQL。

1. if

以aaa表为例子

首先我们还是创建实体类,然后写一个AaaMapper接口

package Mapper;

import Models.aaa;

import java.util.List;
import java.util.Map;

public interface AaaMapper {
    List queryAaa(Map map);
}

然后再去写AaaMapper.xml




    
        select * from aaa where 1=1
        
            and myname=#{myname}
        
        
            and myaddress=#{myaddress}
        
            

if就是这样使用,只要myname不为空的话,那么就会拼接SQL语句,这个时候的SQL语句就变成了select * from aaa where 1=1 and myname=#{myname},同理,下面的myaddress也是一样,如果myname为空,myaddress不为空,这个SQL语句也是可以执行成功的,当然两个都不为空,也是可以的

2. where

上图我们写了一个where 1=1,这个是为了使上面的SQL不报错,因为如果写1=1,当第一个if不满足的时候,我们的SQL语句是select * from aaa where and myaddress=#{myaddress},这样肯定是不行的,所以还有一个where标签

 
       select * from aaa where

            
               id=#{id}
            
            
                and myaddress=#{myaddress}
            

    

这样写,但是当id为空时,就会报错,为了解决这个问题,就有where标签