Smart Mybatis:一个让 MyBatis 重回轻盈的框架

简单说明

Smart Mybatis 通过 Lambda DSL 将实体、Mapper 与 SQL 串起来,不做二次封装、不代理 MyBatis,本质是把已有特性用得更聪明。

官方文档: https://mybatis.icoding.ink/
Github: https://github.com/onlyGuo/smart-mybatis

阅读文档后, 基本有了一个概念:

概念

  • 作者在长期 MyBatis 实战中发现,重复 CRUD 与脚手架生成会让项目迭代和维护成本居高不下,于是先有了实验性的 EasyMybatis(docs/guide/dev/preface.html)。
  • 随着 Spring Boot 普及与 Provider 能力增强,回归轻量、聚焦底层控制的需求越发明显,Smart Mybatis 因此诞生:只增强、不重写。
  • 框架源码极简,声称五分钟即可通读(docs/guide/quick/quick-start.html),强调学习曲线低。

特性

  • 零定制, 零代理
  • 多种命名匹配规则配置
  • 表前缀配置
  • 表明/字段名定制匹配
  • 支持对象字段
  • 支持枚举字段
  • 多种住建策略配置, 支持分布式ID
  • 统一的增删改查
  • 一键开关配置
  • 基于Lambda的DSL查询
  • 全部基于Mybatis原生特性实现, 性能无损, 体积仅64k.

即刻体验

  1. 获取示例项目
    git clone https://github.com/thisguo/spring-boot-starter-smart-mybatis-example.git
    cd spring-boot-starter-smart-mybatis-example
    
  2. 准备数据库与连接信息(docs/guide/quick/quick-start.html):
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/your_database
        username: your_username
        password: your_password
    
    项目启动后即可自动初始化表结构。
  3. 运行
    mvn spring-boot:run
    # 或
    gradle bootRun
    

核心能力概览

极简实体映射

自动同步与配置统一入口

  • spring.mybatis.smart.* 为前缀的配置集中管理增强功能。
  • auto-sync-db:在开发环境自动根据实体更新表结构(docs/guide/dev/auto-sync-db.html),省掉手写 DDL 的重复劳动。
  • enablenaming-conventiontable-prefix 等开关让你逐步引入 Smart Mybatis,必要时还能随时降级为原生行为(docs/guide/quick/project-configuration.html)。

主键与字段的自由度

内置 CRUD 与 DSL 查询

建议的落地路径

  1. 引入依赖:确保项目先包含官方 MyBatis,再按 官方文档 添加 ink.icoding:spring-boot-starter-smart-mybatis

  2. 配置基线:在 application.yml 中统一好 naming-conventiontable-prefixauto-sync-db(开发环境打开同步)。
    就是创建或修改一个Java实体类, 数据库会自动建表或修改表结构, 这倒是很新颖. 之前见过很多通过数据库去生成实体类的方案, 第一次见通过实体类去生成数据库的. 不过也有好处, 以后的开发只需要提交代码就行了, 不会出现不同环境的数据库残缺或不一致的问题.
    作者说生产环境中建议关闭, 但其实我认为不需要关闭因为按照框架源码分析, 如果有问题的话一定会在开发环境中先暴露出来, 不会出现生产独有的问题

  3. 建模实体与 Mapper:实体继承 PO,Mapper 继承 SmartMapper<T>,优先使用注解描述字段特性而不是手写 XML。

  4. 拥抱 DSL:查询逻辑用 Where DSL 表达条件,同时结合 ifAnd/ifOr 处理可选参数,避免 if-else 拼 SQL。
    看着的确很舒服, 配合IDE自动提示的话效率会提高很多, 减少了if else:

// 动态条件查询
public List<User> searchUser(String nicker, Sex sex, Boolean isAdmin){
	return mapper.select(Where
		.ifWhere(User::getName).lite(nicker)
		.ifAnd(User::getSex).equalseTo(sex)
		.ifAnd(User::isAdmin).equalseTo(isAdmin)
	);
}
  1. 善用增强但保留控制权:需要 JSON 字段、主键策略、批量 CRUD 时交给 Smart Mybatis;当要写极端 SQL 时仍可回到原生 Mapper,自由度不受限。

结语

Smart Mybatis 没有试图替你重写 MyBatis,而是提供了一套把实体、配置、查询语义联通的轻量增强。它适合那些既想拥有快速 CRUD、自动建模、可读 DSL,又想随时拿回底层控制权的团队。现在就把它接入你下一个 Spring Boot/MyBatis 项目,体验五分钟读完源码、十分钟落地的轻盈感吧。

posted @ 2025-12-04 11:17  Only丿阿海  阅读(21)  评论(0)    收藏  举报