# 2021年8月12日 - 1.0.0 发布了🎉🎉🎉

# 开发过程

2014年11月开源的 tk.mybatis.mapper 算得上是 MyBatis 的一个重要里程碑,从 通用Mapper (opens new window) 开始, MyBatis 有了真正意义上的通用 DAO 层,增删改查真的不用在手写或者自动生成,极大的方便了开发人员。

通用Mapper 经历过几次大的重构,每次都从底层使用新的思路重新实现,从第一个版本发布到2020年发布的 4.1.5 版本, 一直是兼容性升级,虽然底层变化了很多,集成方式有了变化,但是业务上集成的接口一直兼容。

虽然经历了几次大的重构,但是由于MyBatis内部的机制,导致无法以更方便更简洁的形式来实现通用Mapper, 从2018年就一直想要从根去解决这个问题,在 2019年3月份给 MyBatis 提交的 pr#1391 (opens new window) 合并后(对应 3.5.1 版本,最低要求版本), 终于能以更简单的方式来实现通用 Mapper 了。

2019年实现过一版新的通用Mapper,但是感觉不够好。2020年本来是要写新一版的《MyBatis 从入门到精通》的, 写的过程中也在想着如何把通用Mapper结合到书中,在写书的过程中,逐渐形成了一个新的思路, 结果把目标从写书转移到了开源项目(不务正业),由于工作经常 996, 直到2020年底才基本完成新的实现。本来计划在2021年1月份发布正式版, 为了提供一个更灵活的代码生成器(Mybatis 的 MBG太死板,扩展麻烦), 工作重心又转移到了代码生成器,最终实现了一个代码简单, 功能却异常强大的代码生成器 睿Rui(没开源,作为工具包含在当前项目中直接使用), 此时又过去了好几个月,想着在2021年中发布正式版, 为了尝试在新版本中尽可能通过扩展 100% 兼容 tk-mapper,又增加了一些 SPI 扩展接口。 结果一直拖到了8月份。直到这个月才把 1.0.0 发布了。

整个项目从构思到最终发布经历了近3年的时间,虽然已经花了无数的时间, 但是仍然不能保证有不完美的地方,项目初期,大家发现BUG或者有任何想法都可以提 issues。

# 为什么新版本是 1.0.0?

这是一个全新的版本的,采用了新的包名 io.mybatis,采用了全新的实现,核心代码是独立的 mybatis-provider (opens new window) 项目,在此项目之上形成了 mybaits-mapper (opens new window),这个版本不需要任何配置(不会再因为配置出错),可以简单快速的集成并使用。

关于新版本的特点,建议通过 快速上手 进行了解。

# 后续计划

在旧版本 通用Mapper (opens new window) 中, 有大量的新功能和PR都是增加的新的通用方法,这些方法有些是限制很少的通用方法, 也有很多需要特地条件的通用方法,新版本不会轻易增加新的通用方法, 但是会提供一个扩展项目来容纳所有有意义的通用方法,一方面方便有需要的人取用, 一方面可以作为方法扩展的示例。

除了通用方法外,后续会提供针对 spring boot 的简单 demo,方便入门练习或者参考。

补充,示例项目:

https://github.com/mybatis-mapper/mybatis-mapper-example-springboot

示例项目目前包含 3 个分支,分别为:

  • master 简单集成
  • baseid 简单封装,所有表都使用名为 id,类型为 bigint 的自增主键
  • shardingsphere 分库分表,支持分库分表的代码生成,每个表有不同的id

再之后会提供一个脚手架(或找一些现成的开源)项目改造为 睿Rui 代码生成器使用的项目模板,可以快速从头创建项目, 可以在项目中方便的生成代码。