142 Star 1.4K Fork 248

fluent-mybatis / fluent-mybatis

2022-06-12 18:13
稻草江南
  • 代码生成时,Entity指定超类泛型场景优化处理
  • Fix #I56PNZ: the Generic varargs are NOT changed in this method, so it is type safe.
最后提交信息为: v1.9.8
2022-04-27 11:36
稻草江南
  • 生成的XyzEntity类,可以支持super class了。在super class上允许定义通用的属性。使用方式同定义接口
    输入图片说明
    输入图片说明
    输入图片说明

  • 增加注解@GmtCreate, @GmtModified;方便字段排序

  • mapping中 TABLE_NAME, ENTITY_NAME常量改为全大写

  • Fix ISSUE I4Q3RH

最后提交信息为: fix ISSUE I4Q3RH
2022-04-27 11:35
稻草江南
  • @FormService 增加属性 proxy, 默认true。为false,使用Annotation Proccessor方式生成FormService子类,并且自动实现定义的方法,同时拷贝方法上定义的注解。以支持方法上定义的注解。比如事务处理,缓存处理等功能。
最后提交信息为: add test
2022-03-27 22:06
稻草江南
  • Fix ISSUE I4STG5,增加生成Entity时,自定义字段映射的功能。
  • fix FormService功能,修复设置 GT条件设室,生成的条件错误。
  • Fix ISSUE I4YHGO
  • 生成代码时,允许使用泛型设置
最后提交信息为: v1.9.5
2021-12-25 20:08
稻草江南
  • 功能增强
    1. 代码生成时,如果daoDir路径不设置,则不生成dao的接口是实现,编译时也不生成baseDao类
    2. 代码生成时,增加jdk的日期类型设置
  • 修复join查询设置别名的场景下,嵌套条件别名不生效的问题
  • 修复distinct时,count()方法为count(*)的问题
  • 修复自定义主键时,下列方法不支持主键的情形
    1. save批量Entity
    2. saveOrUpdate
  • BaseEntity属性table supplier限定符设置为transient, 方便fastjson序列化;同时这个属性设置为@Deprecated, 后续版本移除。
最后提交信息为: v1.9.4
2021-12-12 22:14
稻草江南
  • 调整form-service功能模块
  1. 取消掉form-service-meta模块,整合进fluent-mybatis模块;
  2. 独立出fluent-mybatis-annotation模块,方便定义API接口时按最小依赖处理。
最后提交信息为: add test
2021-12-09 21:59
稻草江南
  • FormService增加类似jpa的自动映射参数的功能
    1. 支持关键字: update/save/insert/delete/logicDelete/top/find/count/list/stdPaged/tagPaged/paged/exists等开头的方法推导
    2. 支持上述关键字 + By + 字段1 + And + 字段2 的方法参数推导
    3. 支持方法名称推导+@Entry注解混编方式
    4. 支持枚举参数
  • 实现FormService参数支持javax.validation的校验支持
    jpa style
  • @FormService支持在abstract class类上声明
  • fluent mybatis动态调整表名称实现
    @Bean
    public MapperFactory mapperFactory() {
        return new MapperFactory()
            .tableSupplier((t, v) -> "fluent_mybatis." + t, StudentEntity.class);
    }
  • IRichEntity增加2个快捷方法
    1. firstByNotNull: entity非空字段作为条件查询列表, 返回符合条件的第一条数据
    2. asQuery: 将entity非空字段作为相同条件
  • PrinterMapper打印sql,参数是Date时,格式化处理
  • fluent mybatis动态条件,除支持Predicate判断外,增加boolean的条件方法
最后提交信息为: v1.9.2
2021-11-22 22:08
稻草江南
  • 调整fluent mybatis 1-1,1-N关联关系的实现接口 IEntityRelation,入参由单个Entity改为List,解决1+N查询问题
  • 生成的Entity类增加lombok的 @Builder @NonArgConstructor @AllArgConstuctor注解
  • 推出 Form-service-meta功能,具体内容
最后提交信息为: add form service test
2021-10-30 14:28
稻草江南
  • 修复2个ISSUE

    1. I4FH25

    生成连表查询语句的时候, 如果有嵌套sql, 嵌套的sql里的查询条件没有指定表别名

    1. I4FG8V

    JoinQuery是否含有一个Union和Union All功能

  • 增加新的功能模块 form-service-meta

    1. service api接口定义接口声明, 无需编码即可实现单表的CRUD操作
最后提交信息为: form-service-meta
2021-10-17 16:49
稻草江南
  • 解决数据Entity在多模块场景下的问题(Ref类重名,MapperFactory载入的mapper只有部分)。
    1. Ref和IEntityRelation生成的目录从原来的固定package(cn.org.atool.fluent.mybatis.refs)变更到basePackage。也就是如果有多个basePackage,会存在多份Ref和IEntityRelation.
    2. 进一步精简编译生成的代码,消灭掉 QueryRef和MapperRef 2个文件
  • 代码生成时,增加非充血模型选项(@Tables( isRichEntity = false), 充血模型时, Entity继承RichEntity; 非充血时, Entity继承BaseEntity.
  • IEntity增加根据字段名称获取值的方法: valueBy(FieldMapping), valueByField(String), valueByColumn(String)
  • MapperFactory增加初始化环境的几个方法:
    1. dbType: 修改Entity对象的默认数据库类型
    2. tableSupplier: 修改Entity获取表名称的默认方式
    3. register: 注册PoJoHelper.toPoJo时,非默认类型的转换器
    4. initializer: 其它默认环境参数设置
  • 为了验证Entity多模块的场景,调整了test代码
  • 从1.8.0开始到1.87止,致力于简化代码生成,现在生成的代码结构目录如下, 基本上已无再优化空间
    代码结构
最后提交信息为: v1.8.7
2021-10-13 21:16
稻草江南
  • 修复多数据源时,初始化SqlProvider语句定义时错误
  • 修复count方法,单字段且设置了别名的场景下的错误语法错误
最后提交信息为: v1.8.6.1
2021-10-04 17:40
稻草江南

v1.8.6

  • 简化IRef的工具方法,将不愿暴露给用户使用,但系统要使用的方法区隔开
  • 简化Entity类生成的方法,除entityClass作为默认方法外,其它方法(pkSetter, findPk, tableSupplier)通过基类中调用工具类方法来完成,无需子类重载实现。
  • Mapper#print改为静态工具方法,无需启动容器就可以打印对应的sql语句
  • Entity的findTableBelongTo()方法改为tableSupplier(), changeTableBelongTo(String)方法改为tableSupplier(String);和IRef工具类方法命名保持一致
  • Entity的一对一和一对多的关联方法从原来的AllRef移到IEntityRelation中,允许用户根据需要实现重载(比如增加排序功能)
  • 修复PoJoHelper#toPoJo在输入为大小写混合的场景下的驼峰转换错误
  • 修复MapperFactory的bean在有其它bean定义了@PostConstruct情况下的使用冲突,将MapperFactory的初始化从@PostConstruct方法移到setApplicationContext中
  • 重新实现了Entity充血方法(关联关系)的调用方式,通过函数方法调用,规避了原来的反射实现方式
  • 生成代码,除了运行原来基本类型的定义 @Column方式,增强了定义成泛型类型的方式,比如 List 字段
最后提交信息为: generator
2021-09-25 18:26
稻草江南

v1.8.5 特性

  • 解决v1.8.4如果应用未定义 MapperFactory bean时,映射ResultMap缺失问题。在应用启动时,检查MapperFactory bean是否已定义,如果未定义,抛出提示错误。
  • 增加纯打印sql语句,但不实际执行数据库操作的功能。 方便测试时验证
/**
 * 不实际执行sql语句, 仅仅返回构造好的mybatis SQL语句
 *
 * @param mode       0: '?'占位符模式; 1: 变量替换模式; 2: mybatis变量占位模式
 * @param simulators 模拟执行数据操作, 例: m -> m.listEntity(query)
 * @return sql列表
 */
default List<String> print(int mode, Consumer<IWrapperMapper>... simulators);

示例

    @Test
    void insertWithPk() {
        List<String> sql = mapper.print(m -> m.insertWithPk(new StudentEntity().setId(1L)));
        want.list(sql).eqList("" +
            "INSERT INTO fluent_mybatis.student " +
            "(`id`, `gmt_created`, `gmt_modified`, `is_deleted`, `env`, `tenant`) " +
            "VALUES " +
            "(?, now(), now(), 0, ?, ?)");
    }
  • 增加 WHERE applyIf(boolean condition, Function<WHERE, WHERE> apply) 方法
// 示例
StudentUpdate update = StudentUpdate.updater()
    .set.address().is("address")
    .end()
    .where.applyIf(student != null,
        c -> c.id().eq(student.getId())
            .and.age().between(student.getAge() - 10, student.getAge() + 10)
            .and.address().like(student.getAddress(), If::notBlank)
    )
    .end();
最后提交信息为: comments
2021-09-21 22:05
稻草江南

v1.8.4

  • 减少生成代码,彻底去掉了生成的对应XyzSqlPrivder类,直接使用SqlProvider; Mapper类也只生成了XzyMapper空壳,满足泛型化和返回对应的IMapping实例。所有的Mapper实现的注解都在IEntityMapper上完成。
  • insert,insertBatch的主键定义和主键回写主键能力,在加载时定义; listEntity的映射ResultMap也在加载时定义. 见StatementBuilder类和SqlKit类实现
    注:fluent mybatis启动时需要设置 MapperFactory bean
    @Bean
    public MapperFactory mapperFactory() {
        return new MapperFactory();
    }
  • 支持编码切换数据库类型,满足一套程序支持2个数据库的述求(比如正式环境用mysql,测试环境用h2);

当前前提时没有用到特殊的语法函数

// 切换数据库
IRef.changeDbType(DbType.MYSQL);
  • select增加排除字段功能 select.exculde(...)
// 示例一
new XyzQuery().select.exclude("id", "user_name");
// 示例二
new XyzQuery().select.exclude(FieldRef.Student.id, FieldRef.Student.userName);
// 示例三
new XyzQuery().select.exclude(StudentEntity::getId, StudentEntity::getUserName);
  • join构造时,不再强制显式设置Query的别名,如果没有设置别名,框架可以自动赋值别名
JoinQuery query = new StudentQuery().join(new StudentScoreQuery())
    .onEq(StudentEntity::getId, StudentScoreEntity::getStudentId)
    .endJoin().build();

  • 为支持上述动态切换数据库类型,join查询无需设置别名等功能,内部对sql拼装进行了改造。所有的sql拼装采用函数表达式,直到执行时才完整构造。
最后提交信息为: FreeKit
2021-09-14 09:19
稻草江南

v1.8.3

  • Fix ISSUE I492JR: 解决在具体的应用场景中,因为有多个classloader时Entity Class比较不等,抛出is not a @FluentMybatis Entity的异常
2021-09-12 20:54
稻草江南

v1.8.2

  • updateById, logicDeleteById等根据id条件进行update的操作,也支持IDefaultSetter里设置的默认更新值
  • Fix Issue I47X9R: oracle批量插入时,如果插入值为null,设置别名

v1.8.1

  • 优化 I49EUN: 分页查询时,当count=0时,不再查询具体list
  • 优化 I47E1E: 分页查询时,StdPagedList对象增加 hasNextPage 属性
  • Fix I495FE: oracle数据库生成代码时,Entity属性大写问题修复
  • 优化 分页查询带有group by条件时的支持
  • @TableId typeHandler在deleteById, findById等方法上的支持
最后提交信息为: oracle batch insert
2021-09-06 22:40
稻草江南

v1.8.0.1

v1.8.0

  • 大幅简化编译时代码生成的类文件

    1. (XyzEntityHelper + XyzDefaults + XyzMapping)这3个功能文件合并到XyzMapping文件中
    2. (XyzWrapperHelper + XyzFormSetter)这2个功能文件合并到XyzSegment文件中
    3. XyzSqlProvider文件合并到XyzMapper中
  • 增强FieldMapping对象的能力,记录了的Entity对象的getter和setter的lambda表达式,为减少编译代码生成提供了基础能力

  • 简化生成的代码量, 将很多功能移到基类和工具类中实现, 1.8.0编译生成的代码量减少到原来的1/2多,但功能不变

  • 增强多数据库类型支持的能力, 统一入口为 Mapper->SqlProvier->(不同数据库的 SqlKit 实现)

  • 修复多个ISSUE

    1. I47X9R: 批量插入时,如果多个实体对象谋个属性均未赋值,则该属性不在insert 字段列表中
    2. I47VM5: 对like的传入值,做了简单拦截,不允许是单个%符号
    3. I466L2: 对PoJoHelper#toPoJo,如果map对象的属性和PoJo对象不完全匹配时,增加 #toPoJoListIgnoreNotFound 方法供选择
    4. I48448: 优化union代码结构,union代码外加 ()括起来,防止复杂语法解析问题
    5. I47VMA: 代码生成时,解决不规范的字段名称和表名称问题
    6. I48HQ4: 对@TableId也增加typeHandler的支持
  • 调整Updater和Query的默认条件设置行为,默认所有的Updater和Query都代码预设好的默认条件,另外增加 emptyQuery和emptyUpdater方法用来创建不带默认条件的构造器。

  • 增加mybatis的二级缓存设置能力

最后提交信息为: v1.8.0.1
2021-09-06 22:03
稻草江南

v1.8.0

最后提交信息为: v1.8.0
2021-08-21 22:24
稻草江南

v1.7.3

最后提交信息为: add test
2021-08-18 22:07
稻草江南

v1.7.2

最后提交信息为: v1.7.2
Java
1
https://gitee.com/fluent-mybatis/fluent-mybatis.git
git@gitee.com:fluent-mybatis/fluent-mybatis.git
fluent-mybatis
fluent-mybatis
fluent-mybatis

搜索帮助