更便捷的Mybatis插件——EasyMybatis

休言女子非英物,夜夜龙泉壁上鸣。这篇文章主要讲述更便捷的Mybatis插件——EasyMybatis相关的知识,希望能为你提供帮助。
easy-mybatis是一个对Mybatis的增强框架(插件)。在Spring集成Mybatis的基础上,将项目开发中对数据库的常用操作统一化。使用本框架可以很便捷的对数据库进行操作,提高开发效率,减少机械行为。

easy-mybatis
??项目主页??:https://mybatis.zuoyu.top?
?API文档地址??:https://mybatis.zuoyu.top/doc/index.html?
?GitHub地址??:https://github.com/zuoyuip/easy-mybatis?
?Gitee地址??:https://gitee.com/zuoyuip/easy-mybatisMaven依赖引入

< !-- https://mvnrepository.com/artifact/top.zuoyu.mybatis/easy-mybatis-spring-boot-starter -->
< dependency>
< groupId> top.zuoyu.mybatis< /groupId>
< artifactId> easy-mybatis-spring-boot-starter< /artifactId>
< version> 1.0.0< /version>
< /dependency>

Gradle依赖引入
// https://mvnrepository.com/artifact/top.zuoyu.mybatis/easy-mybatis-spring-boot-starter
implementation top.zuoyu.mybatis:easy-mybatis-spring-boot-starter:1.0.0

框架初衷
这个框架的初衷是,减少java程序员千篇一律的数据库操作。
对于开发人员来说:
  • 精力应该花费在业务逻辑上,而非机械式的“技术”上。
  • 项目中减少无关痛痒的代码,从抽象的角度看实现。
  • 各司其职,各劳其力,追求项目角度的服务流水线。
服务分离的时代如今已很难看到单体架构的项目(感兴趣的可以查看我对架构演变的描述??《浅谈微服务》??),目前的项目大都是通过??RESTful??、??MQ??、??Socket??的方式(协议)进行数据传输。这让我开始质疑传统?


?JavaWeb??项目中的数据库操作模式——即??Model(DTO)??存在的意义。理论上,数据库设计是不可能完全遵循视图模型的,这就导致“正确”的做法是在项目中引入??VO??,由多个??DTO??来组装。
那么,为什么不能用灵活的Map来替代呢?
对一个??Map??的方法进行拓展,增加其对??Json??的解析能力,那么是不是就可以摆脱??POJO??的各种麻烦组装。
思考框架设计我在思考如何设计这个框架的时候,被需要考虑的方方面面给阻挡住了。因为一个数据库框架需要考虑的东西实在太多了,比如:
  1. 事务机制
  2. 类型转换
  3. 会话管理
···思来想去,发现自己方向跑偏了,我只是希望统一数据库操作的接口 + 摆脱Model,没必要重新平地起墙,完全可以在一个现有的框架基础上进行封装。那么,对这个现有框架的选择就尤为重要了。
现有框架的选择目前Java中主流的数据库操作框架:
  • Spring JDBC
  • Spring Data JPA
  • Mybatis
  • Hibernate
选择现有框架有一个原则——“统一数据库操作的接口 + 摆脱Model”是对该框架的加强,而非变异;不能因为“统一数据库操作的接口 + 摆脱Model”而无法使用原框架的部分功能。“


摆脱Model”这个特点,首先就要排除重度??ORM??框架,也就是支持??JPA??操作的数据库——??Spring Data JPA??、??Hibernate??;原因很简单,这两个框架的强大之处恰恰就在它完全面向??Model??操作。剩下的就只有两个框架了,?


?Spring JDBC??和??Mybatis??。其中,??Spring JDBC??留给了开发人员大量的可操作空间,更加自由,但恰恰是这种自由使得它更加繁琐。而??Mybatis??是一个轻量??ORM??框架,准确来说??Mybatis??不能称为??ORM??框架,因为它并不是面向??Model??操作数据库,仅仅是将数据库字段与??Model??字段互相赋值,并没有做到??ORM??定义的关系映射。
抉择由以上各框架的特点,结合国内Java语言中数据库操作框架的热度,毫无疑问的选择了??Mybatis??。考虑到?


?SpringBoot??对??Mybatis??优秀的支持级别,我决定基于??mybatis-spring-boot-starter??开发这款框架,准备来说应该称其为“插件”。
框架特性
  • 更便捷
摒弃传统??mybatis??的??model??、??xml??、??dao??数据库操作模式,避繁就简,快速开发。
  • 更高效
采用预编译??SQL??,拒绝运行期间反射生成??SQL??,性能更高效。
  • 无侵入
只是对Mybatis-Spring的增强插件,对已有工程不做任何修改,仍可使用原生框架的功能,仅仅是简化了开发阶段对数据库的操作。
  • 统一操作接口
对数据库的所有操作共用一个接口,降低使用门槛,轻松操作数据库。
  • 统一操作对象
使用??JsonObject??为数据对象,提供一系列操作方法,方便从持久化对象组装为视图对象。
  • 易上手
整个框架只提供了一个接口、一个注解、两个对象,仅仅一行配置便可完成对数据库进行常用操作。
  • ...
安利
  • 在??mybatis-spring-boot??环境下,使用该框架(插件),可以减少传统??Mybatis??使用中对??model??、??xml??、??dao??的机械式开发。
  • 所有的数据库操作均使用??MapperRepository??接口,通过注解??@Magic("xxx")??标记接口的数据表归属,即可直接使用。
  • 该框架(插件)不妨碍同时使用传统??Mybatis??中??model??、??xml??、??dao??的数据库开发方式。
快速上手安装
  • 安装??mybatis-spring-boot???环境
mybatis-spring-boot的Maven依赖
< parent>
< groupId> org.springframework.boot< /groupId>
< artifactId> spring-boot-starter-parent< /artifactId>
< version> $spring-boot.version< /version>
< relativePath/>
< /parent>

< dependencies>
< dependency>
< groupId> org.mybatis.spring.boot< /groupId>
< artifactId> mybatis-spring-boot-starter< /artifactId>
< version> $mybatis-spring-boot.version< /version>
< /dependency>
< /dependencies>

mybatis-spring-boot的Gradle依赖
plugins
id org.springframework.boot version $springBootVersion
id io.spring.dependency-management version $springManagementVersion
id java


dependencies
implementation org.mybatis.spring.boot:mybatis-spring-boot-starter:$mybatisSpringVersion

  • 安装本框架(插件)
Maven依赖引入
< !-- https://mvnrepository.com/artifact/top.zuoyu.mybatis/easy-mybatis-spring-boot-starter -->
< dependency>
< groupId> top.zuoyu.mybatis< /groupId>
< artifactId> easy-mybatis-spring-boot-starter< /artifactId>
< version> 1.0.0< /version>
< /dependency>

Gradle依赖引入
// https://mvnrepository.com/artifact/top.zuoyu.mybatis/easy-mybatis-spring-boot-starter
implementation top.zuoyu.mybatis:easy-mybatis-spring-boot-starter:1.0.0

配置
这里以??mysql??数据库为例,??Oracle??数据库配置请参考配置说明
  1. 配置??spring-boot-jdbc???数据库
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.0.0.1:3306/xxxx
username: xxxx
password: xxxx

关于??springBoot??的配置,这里不多赘述,更多移步??springBoot官网??。
  1. 配置??easy-mybatis???支持的表名(例子)
easy-mybatis:
table-names: teacher, student

这里的??table-names??配置,表示需要??easy-mybatis??框架支持的数据表名,多个表名使用逗号隔开。即可使用?


?easy-mybatis??框架操作??teacher??和??student??两个数据表,如果需要支持其他数据表,需要在此配置。
操作数据库(例子)
@SpringBootTest
class DemoApplicationTests

// 表示该接口用来操作名称为teacher的数据表
@Magic("teacher")
private MapperRepository teacherRepository;

// 表示该接口用来操作名称为student的数据表
@Magic("student")
private MapperRepository studentRepository;


// 查询teacher表下所有数据
@Test
void teacherTest()
teachertRepository.selectList().forEach(System.out::println);


// 查询student表下符合特定条件的数据
@Test
void studentTest()
studentRepository.selectListByExample(
new JsonObject().put("birthday", "2009/12/12 12:12:12")
).forEach(System.out::println);




使用??MapperRepository??接口对数据库进行操作,需要使用??@Magic("表名称")??标记该接口的数据表归属。在本例中,?


?@Magic("teacher")??表示该??MapperRepository??为??"teacher"??数据表的操作接口,可以通过??teacherRepository??调用一系列方法完成对??"teacher"??数据表的操作。
配置说明【更便捷的Mybatis插件——EasyMybatis】该框架(插件)的全部相关配置
#easy-mybatis的相关配置
easy-mybatis:
#表示需要载入的数据库表
table-names: SYS_USER, SYS_DEPT
#默认的日期字符串格式
data-format

    推荐阅读