Releases: mybatis-mapper/mapper
1.1.0 发布
2022年1月3日 - 1.1.0 发布 - 新年快乐:tada:
mybatis-provider 项目升级到 1.1.0
- 添加
NameConvert
接口,用于转换实体和字段名,默认为驼峰转下划线,可以通过 SPI 覆盖默认实现 @Entity.Column
注解增加orderByPriority
用于指定多个排序字段时的顺序,值越小优先级越高
mybatis-mapper 项目升级到 1.1.0
- 增加
BaseMapper
,作为最基础的接口定义,原来的Mapper
继承BaseMapper
,并且重写 insert 方法为自增 - JPA支持不带注解的默认实体和字段,默认情况下使用驼峰转下划线,可以通过SPI覆盖默认
NameConvert
接口实现
1.0.4 发布
1.0.3 发布
2021年11月2日 - 1.0.3 发布了:tada::tada::tada:
mybatis-mapper 项目升级为 1.0.3:
- mybatis-common 项目中缺少默认语言包,已经将中文设置为默认语言包。
- 解决
Example
中的orderBy
多次时连接字符串错误的 BUG,增加多个方便使用的orderBy
方法。 - 修复 Example.selectColumns 关键词列名的Bug #16 by ydq
- Example 系列方法 支持拼接单层级的 OR 条件 #17 by ydq
尝试性的支持 #15 单层级(不支持 andOr() 条件里面 继续嵌套更细粒度的 andOr() )的 or 条件拼接输出SQL(支持 select 和 update)://example: UserMapper2 mapper = sqlSession.getMapper(UserMapper2.class); Example<User> example = mapper.example(); example.createCriteria() .andEqualTo(User::getSex,"男") .andOr(example.orPart() .andLike(User::getUserName,"杨%"), example.orPart() .andLike(User::getUserName,"俞%") .andLike(User::getUserName,"%舟"));
xxx WHERE ( sex = ? AND ( ( name LIKE ? ) OR ( name LIKE ? AND name LIKE ? ) ) )
Fn<T, R>
功能优化,增加缓存,支持引用父类方法,示例如下:public static class BaseId { @Entity.Column(id = true) private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id; } } public static class BaseEntity extends BaseId { @Entity.Column(value = "when_create", jdbcType = JdbcType.TIMESTAMP) private Long whenCreate; public Long getWhenCreate() { return whenCreate; } public void setWhenCreate(Long whenCreate) { this.whenCreate = whenCreate; } } @Entity.Table("sys_user") public static class SysUser extends BaseEntity { @Entity.Column("name") private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } } @Entity.Table("sys_role") public class SysRole extends BaseEntity { @Entity.Column("name") private String roleName; public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } } @Test public void testExtends() { Assert.assertEquals("id", ((Fn<SysUser, Object>) SysUser::getId).toField()); Assert.assertEquals("id", ((Fn<SysUser, Object>) SysUser::getId).toColumn()); Assert.assertEquals("whenCreate", ((Fn<SysUser, Object>) SysUser::getWhenCreate).toField()); Assert.assertEquals("when_create", ((Fn<SysUser, Object>) SysUser::getWhenCreate).toColumn()); Assert.assertEquals("userName", ((Fn<SysUser, Object>) SysUser::getUserName).toField()); Assert.assertEquals("name", ((Fn<SysUser, Object>) SysUser::getUserName).toColumn()); Assert.assertEquals("id", ((Fn<SysRole, Object>) SysRole::getId).toField()); Assert.assertEquals("id", ((Fn<SysRole, Object>) SysRole::getId).toColumn()); Assert.assertEquals("whenCreate", ((Fn<SysRole, Object>) SysRole::getWhenCreate).toField()); Assert.assertEquals("when_create", ((Fn<SysRole, Object>) SysRole::getWhenCreate).toColumn()); Assert.assertEquals("roleName", ((Fn<SysRole, Object>) SysRole::getRoleName).toField()); Assert.assertEquals("name", ((Fn<SysRole, Object>) SysRole::getRoleName).toColumn()); }
1.0.0 正式版发布
2021年8月12日 - 1.0.0 发布了:tada::tada::tada:
开发过程
2014年11月开源的 tk.mybatis.mapper 算得上是 MyBatis 的一个重要里程碑,从 通用Mapper 开始,
MyBatis 有了真正意义上的通用 DAO 层,增删改查真的不用在手写或者自动生成,极大的方便了开发人员。
通用Mapper 经历过几次大的重构,每次都从底层使用新的思路重新实现,从第一个版本发布到2020年发布的 4.1.5 版本,
一直是兼容性升级,虽然底层变化了很多,集成方式有了变化,但是业务上集成的接口一直兼容。
虽然经历了几次大的重构,但是由于MyBatis内部的机制,导致无法以更方便更简洁的形式来实现通用Mapper,
从2018年就一直想要从根去解决这个问题,在 2019年3月份给 MyBatis 提交的
pr#1391 合并后(对应 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 项目,在此项目之上形成了 mybaits-mapper,这个版本不需要任何配置(不会再因为配置出错),可以简单快速的集成并使用。
关于新版本的特点,建议通过 快速上手 进行了解。
后续计划
在旧版本 通用Mapper 中,
有大量的新功能和PR都是增加的新的通用方法,这些方法有些是限制很少的通用方法,
也有很多需要特地条件的通用方法,新版本不会轻易增加新的通用方法,
但是会提供一个扩展项目来容纳所有有意义的通用方法,一方面方便有需要的人取用,
一方面可以作为方法扩展的示例。
除了通用方法外,后续会提供针对 spring boot 的简单 demo,方便入门练习或者参考。
再之后会提供一个脚手架(或找一些现成的开源)项目改造为 睿Rui
代码生成器使用的项目模板,可以快速从头创建项目,
可以在项目中方便的生成代码。