zoukankan      html  css  js  c++  java
  • ibit-mybatis 2.x 介绍

    原文链接:ibit-mybatis 2.x 介绍

    概述

    ibit-mybatis 是一个 Mybatis 的增强工具,在 Mybatis 的基础上增加了新的特性与功能,志在简化开发流程、提高开发效率。

    特性

    • 无侵入,引入ibit-mybatis对现有工程不会产生影响。
    • 无 xml 配置,基于注解的方式实现
    • 灵活的CRUD(增、删、改、查)操作,Mapper,支持常用的单表CRUD操作,更有强大的SQL构造器(sql-builder),满足更为复杂的操作(如聚合函数、分组、连表、分页),为了让sql-builder更好的支持 ibit-mybatis,从 ibit-mybatis 2.0 开始,sql-builder 合并到 ibit-mybatis 中。
    • 内置代码生成器(ibit-mybatis-generator),指定数据库表,自动生成Mapper(无主键、单主键和多主键 Mapper)、Entity、Properties等基础类,减少重复或者相似代码编写。
    • 扩展支持,数据脱敏(后续支持)

    sql-builder描述

    sql-builder定义动态SQL的生成规则,用来实现单表的CRUD操作。

    核心 sql 接口

    详细 api 文档参考:ibit-mybatis 2.x API 文档

    说明 接口
    搜索 QuerySql
    计数 CountSql
    删除 DeleteSql
    插入 InsertSql
    更新 UpdateSql

    sql 接口支持

    不同类型的 sql, 其语句的约束不一样,下表列举所有的语句支持。

    接口 支持方法 说明
    ColumnSupport column
    columnPo
    SELECT column1[, column2...] 语句
    DeleteSupport delete DELETE t1.* 语句
    DistinctSupport distinct DISTINCT 语句
    FromSupport from FROM table1 t1[, table2 t2...] 语句
    GroupBySupport groupBy GROUP BY t1.column1[, t2.column2, ...]语句
    HavingSupport having
    andHaving
    orHaving
    HAVING语句
    InsertTableSupport insert INSERT INTO table1 t1 语句, t1表示 "表别名"
    JoinOnSupport joinOn
    leftJoinOn
    rightJoinOn
    fullJoinOn
    innerJoinOn
    complexLeftJoinOn
    complexRightJoinOn
    complexFullJoinOn
    complexInnerJoinOn
    [LEFT|RIGHT|FULL|INNER] JOIN ON语句
    LimitSupport limit LIMIT #{start}, #{limit}语句
    OrderBySupport orderBy ORDER BY 语句
    SetSupport set SET 条件语句
    UpdateTableSupport update UPDATE table1 t1[, table2 t2...]语句,t1,t2表示"表别名"
    ValuesSupport values (column1, column2, ...) VALUES(?, ?, ...)语句
    WhereSupport where
    andWhere
    orWhere
    WHERE 语句

    sql 工厂类

    工厂类:tech.ibit.mybatis.sqlbuilder.SqlFactory,一般不直接使用,继承 RawMapper 的 Mapper 可直接创建 QuerySqlCountSqlDeleteSqlInsertSqlUpdateSql 对应实例。

    Mapper 说明

    Mapper 基础支持

    ibit-mybatis 定义了 4 种 Mapper,分别是 RawMapperNoIdMapperSingleIdMapperMultipleIdMapper。以下分别说明。

    Mapper 类型 父接口 说明
    RawMapper / 定义最原始的增、删、改、查和 Sql 实例创建
    NoIdMapper RawMapper 扩展无主键表的增
    SingleIdMapper NoIdMapper 扩展单主键表的根据id增、删、改、查
    MultipleIdMapper NoIdMapper 扩展多主键表的根据id增、删、改、查

    使用 ibit-mybatis-generator 2.x 版本,会根据表主键数量,继承不同的 Mapper。

    Mapper 结合 Sql 自定义增、删、改、查

    Mapper 创建 Sql 实例方法 实例类型 实例执行方法说明
    createQuery QuerySql executeQueryPage:查询(包含分页信息)
    executeQuery:查询列表
    executeQueryOne:查询单条
    executeQueryDefaultPage:查询基本类型(包含分页信息)
    executeQueryDefault:查询基本类型
    createCount CountSql executeCount:计数
    createDelete DeleteSql executeDelete:执行删除
    createInsert InsertSql executeInsert:执行插入
    executeInsertWithGenerateKeys:执行插入并生成主键
    createUpdate UpdateSql executeUpdate:执行更新

    自定义查询例子:

    public User getByUsername(String username) {
        if (StringUtils.isBlank(username)) {
            return null;
        }
        return mapper
                .createQuery()
                .columnPo(User.class)
                .from(UserProperties.TABLE)
                .andWhere(UserProperties.username.eq(username))
                .limit(1)
                .executeQueryOne();
    }
    

    用法

    相关引用

    Gradle

    compile 'tech.ibit:ibit-mybatis:${lastest}'
    

    Maven

    <dependency>
      <groupId>tech.ibit</groupId>
      <artifactId>ibit-mybatis</artifactId>
      <version>${latest}</version>
    </dependency>
    

    说明: 将 "${latest}" 替换成 2.0 以上版本。

    配置说明

    需要将 Mybatis Configuration 的 mapUnderscoreToCamelCase 的值设置为 true。

    方式1:使用 mybatis-config.xml

    <configuration>
        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
    </configuration>    
    

    方式2:java 代码方式

    Configuration configuration = new Configuration(environment);
    configuration.setMapUnderscoreToCamelCase(true);
    

    方式3:使用了 mybatis-spring-boot-starter,修改配置如下

    # 字段映射驼峰
    mybatis.configuration.map-underscore-to-camel-case=true
    

    其他说明

    ibit-mybatis 定义了枚举类型(CommonEnum,枚举-Integer转换),其TypeHandlerCommonEnumTypeHandler

    如果使用 CommonEnum 作为系统通用枚举类,则需要做以下改造。

    a. 新的枚举需要实现CommonEnum#getValue方法。

    b. SqlProvider 需要做配置

    SqlProvider.setValueFormatter(new LinkedHashMap<Class, Function<Object, Object>>() {{
        put(tech.ibit.mybatis.CommonEnum.class, o -> ((tech.ibit.mybatis.CommonEnum) o).getValue());
    }});
    

    c. 修改默认的枚举 TypeHandler

    方式1:使用 mybatis-config.xml

    <configuration>
        <settings>
            <setting name="defaultEnumTypeHandler" value="tech.ibit.mybatis.CommonEnumTypeHandler"/>
        </settings>
    </configuration>    
    

    方式2:java 代码方式

    Configuration configuration = new Configuration(environment);
    configuration.setDefaultEnumTypeHandler(tech.ibit.mybatis.CommonEnumTypeHandler.class);
    

    方式3:使用了 mybatis-spring-boot-starter,修改配置如下

    # 指定默认的枚举处理类
    mybatis.configuration.default-enum-type-handler=tech.ibit.mybatis.CommonEnumTypeHandler
    

    相关项目项目

    公众号

    喜欢我的文章,请关注公众号

    IBIT程序猿

  • 相关阅读:
    存储过程使用:
    java map,set,list
    Jbox帮助文档,默认的属性含义
    checkboxlist的说明及使用
    java中两种select方式,,一种从数据表中读取
    IE6下<a href="#">与<a href="javascript:void(0);">的区别
    用javascript如何在框架间传值
    a href=#与 a href=javascript:void(0) 的区别
    关于如何导入GPUImage
    GPUImage实现过程
  • 原文地址:https://www.cnblogs.com/javaDeveloper/p/13222407.html
Copyright © 2011-2022 走看看