• mybatis SQL构造器


    org.apache.ibatis.jdbc.AbstractSQL<T>

    org.apache.ibatis.jdbc.AbstractSQL<T> 抽象泛型类,它主要用于解决书写SQL时经常多了或者少了and、or、where、括号等等内容问题。

    实际上,它的原理说起来也简单,就是把SQL拆分成多个部分,然后再根据语句类型来进行拼装。

    核心方法:

      @Override
      public String toString() {
        StringBuilder sb = new StringBuilder();
        sql().sql(sb);
        return sb.toString();
      }
    其中,第一个sql()是调用它的sql()方法,返回内部类SQLStatement的实例,再调用SQLStatement的sql(Appendable a)方法,传入具体的Appendable实现对象StringBuilder。

    实际使用

    org.apache.ibatis.jdbc.SQL extends AbstractSQL<SQL> ;

    构造SQL常规写法

    public String insertPersonSql() {
      String sql = new SQL()
        .INSERT_INTO("PERSON")
        .VALUES("ID, FIRST_NAME", "#{id}, #{firstName}")
        .VALUES("LAST_NAME", "#{lastName}")
        .toString();
      return sql;
    }

    构造SQL非常规写法

    public String insertPersonSql() {
      return new SQL() {{
        INSERT_INTO("PERSON");
        VALUES("ID, FIRST_NAME", "#{id}, #{firstName}");
        VALUES("LAST_NAME", "#{lastName}");
      }}.toString();
    }

    初步看,这种写法与上面的写法似乎差别也不大,但实际上差异还是很大的。

    此写法,实际上是创建了一个SQL的匿名子类,然后在内部调用类似匿名构造块。

    总结

    实际上,AbstractSQL这个类单独来看,并不能给我们构造SQL语句带来什么方便,反而是把语句拆分特别复杂,还不如直接写来得方便。

    但是结合MyBatis的Annotation和Statement解析器,这个自动过程下,它的功能就显得特别强大了。

  • 相关阅读:
    python使用 db.select 返回的数据只能遍历一次
    redis学习主从配置
    php操作EXCLE(通过phpExcle实现读excel数据)
    php操作EXCLE(通过phpExcle实现向excel写数据)
    Redis 源码安装
    MongoDb环境安装
    php下载
    漂亮的jQuery tab选项卡插件
    jquery禁用右键、文本选择功能、复制按键的实现
    jquery中邮箱地址 URL网站地址正则验证实例
  • 原文地址:https://www.cnblogs.com/huntdream/p/6016488.html
Copyright © 2020-2023  润新知