栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis之动态SQL

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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标签