sql语句构建器是什么?为什么要使用sql语句构建器?

​ sql语句构建器是mybatis提供的一种构建sql语句的方式,因为在编写比较复杂的slq语句时,如果使用字符拼接的方式很容易一不留神就编写错误,比如差个逗号,查个引号之类的错误屡见不鲜,而sql语句构建器的存在就是为了我们在编写sql语句的时候,进行分开编写,把错综复查的sql语句简化分来。

sql构建器的核心

使用sql构建器的核心就是使用mybatis提供的核心SQL类,使用该类下面的方法,就能够完成sql的构建。

SQL类相关API

  1. 关系图

在这里插入图片描述

我们可以看到SQL类是实现了AbstractSQL抽象类,我们构建sql所需的方法都在抽象父类中,当时抽象类没法创建对象,所有我们使用其SQL子类。

  1. 相关常用方法

    1.	SELECT(String)
    	SELECT(String...)
        代替SELECT关键字,参数为要查询的字段,可以多次使用此方法进行追加要查询的字段。
        
    2.	SELECT_DISTINCT(String)
        SELECT_DISTINCT(String...)
    	查询并去重,代替SELECT DISTINCT 关键字,参数为要查询的字段。
    	
    3.	FROM(String)
        FROM(String...)
    	代替FROM关键字,参数通常是一个表名或别名。
    	
    4.	OR()
    	使用 OR 来分隔当前的 WHERE 子句条件
    	
    5.	AND()
    	使用 AND 来分隔当前的 WHERE子句条件
    	
    6.	GROUP_BY(String)
        GROUP_BY(String...)
    	代替 GROUP BY 关键字,参数为要根据分组的字段名。
    	
    	
    ...其他方法可以去官网进行查看
    ...官网地址:https://mybatis.org/mybatis-3/zh/statement-builders.html
    

配合构建器使用的标签

  1. 查询操作使用的标签
    • @SelectProvider:生成查询用的 SQL 语句注解。
    • type 属性:生成 SQL 语句功能类对象
    • method 属性:指定调用方法
  2. 新增操作使用的标签
    • @InsertProvider:生成新增用的 SQL 语句注解。
      • type 属性:生成 SQL 语句功能类对象
      • method 属性:指定调用方法
  3. 修改操作使用的标签
    • @UpdateProvider:生成修改用的 SQL 语句注解。
      • …属性与前面的相同
  4. 删除操作使用的标签
    • @DeleteProvider:生成删除用的 SQL 语句注解。
      • …属性与前面的相同

使用示例

  • 实体类

    //学生实体类
    public class Student {
        private Integer id;
        private String name;
        private Integer age;
        
        //...构造及get、set方法省略
    }
    
  • 接口

    //关于学生的数据访问接口
    public interface StudentMapper {
        //查询全部
        //以下相当于 -> @Select("SELECT * FROM student")
        // type:使用构造器构造sql语句所在类的字节码对象。   method:获取哪一个方法中构建的sql语句
        @SelectProvider(type = ReturnSql.class , method = "getSelectAll")
        public abstract List<Student> selectAll();
    }
    
  • 构造sql的类

    //在此类中使用构造器,构造sql语句
    public class ReturnSql {
        //定义方法,返回查询的sql语句
        public String getSelectAll() {
            //使用内部类的形式构建
            return new SQL() {
                //这个大括号 -> {} 表示构造代码块,表示每一次创建此对象,都会执行构造代码块中的代码
                {
                    //表示查询学生表中的左右记录
                    SELECT("*");
                    FROM("student");
                }
                //toString()方法表示将构造的sql语句转化为一个字符串,并返回
            }.toString();
        }
    }
    

    可以看出此方法比我们直接在接口上编写sql语句要麻烦一点,所以使用sql构建器构建sql的这种情况使用不多。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐