代码拉取完成,页面将自动刷新
生成的XyzEntity类,可以支持super class了。在super class上允许定义通用的属性。使用方式同定义接口
增加注解@GmtCreate, @GmtModified;方便字段排序
mapping中 TABLE_NAME, ENTITY_NAME常量改为全大写
Fix ISSUE I4Q3RH
@Bean
public MapperFactory mapperFactory() {
return new MapperFactory()
.tableSupplier((t, v) -> "fluent_mybatis." + t, StudentEntity.class);
}
/**
* 不实际执行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, ?, ?)");
}
// 示例
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();
@Bean
public MapperFactory mapperFactory() {
return new MapperFactory();
}
当前前提时没有用到特殊的语法函数
// 切换数据库
IRef.changeDbType(DbType.MYSQL);
// 示例一
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);
JoinQuery query = new StudentQuery().join(new StudentScoreQuery())
.onEq(StudentEntity::getId, StudentScoreEntity::getStudentId)
.endJoin().build();
v1.8.0.1
大幅简化编译时代码生成的类文件
增强FieldMapping对象的能力,记录了的Entity对象的getter和setter的lambda表达式,为减少编译代码生成提供了基础能力
简化生成的代码量, 将很多功能移到基类和工具类中实现, 1.8.0编译生成的代码量减少到原来的1/2多,但功能不变
增强多数据库类型支持的能力, 统一入口为 Mapper->SqlProvier->(不同数据库的 SqlKit 实现)
修复多个ISSUE
调整Updater和Query的默认条件设置行为,默认所有的Updater和Query都代码预设好的默认条件,另外增加 emptyQuery和emptyUpdater方法用来创建不带默认条件的构造器。
增加mybatis的二级缓存设置能力