dbVisitor 5.4.0 发布,高度兼容 MyBatis 的轻量 ORM 框架


8 月 26 日「源创会」北京站,聊聊 AI 大模型与底层技术 >>>

介绍

dbVisitor 是一个全功能数据库访问 ORM 工具,提供对象映射、丰富的类型处理、动态 SQL、存储过程、 内置分页方言 20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句 / 多结果。并兼容 Spring 及 MyBatis 用法。 它不依赖任何其它框架,因此可以很方便的和任意一个框架整合在一起使用。

依赖

<dependency>
<groupId>net.hasor</groupId>
<artifactId>dbvisitor</artifactId>
<version>5.4.0</version>
</dependency>

不兼容更新​

  • 新增:SelectKeyHandler 类新增参数标识是 before 调用还是 after 调用
  • 新增:KeySeqHolder 增加 onBefore/onAfter 方法用于标识调用阶段
  • 优化:LambdaTemplate Map 模式下不在依赖任何数据库元信息,
    • 至此 dbVisitor 不会查询任何数据库元信息数据
  • 优化:重写 InsertLambda 的逻辑可以有效处理 Entity 和 Map 两个模式下的差异点
  • 移除:PhoenixDialect 方言

新增​

  • 新增:@BindTypeHandler 注解方便使用自定义 TypeHandler
  • 新增:URITypeHandler、URLTypeHandler 两个 TypeHandler 及Types.DATALINK 和 Types.ROWID JDBC Type 支持
  • 新增:h2/db2/derby/hive/hsql/impala/informix/sqllite/sqlserver/达梦/虚谷数据的关键字字典文件
  • 新增:mapper 文件级可以配置 useDelimited 属性
  • 新增:lambdaUpdate UpdateExecute 接口中增加一组 Condition 方法
  • 新增:DalRegistry 增加两个 hasScope 方法,用于判断某个 scope 是否存在
  • 新增:Lambda Delete/Insert/Select/Update for Map 支持 MappingOptions选项

优化​

  • 移除 dbVisitor generate 相关未完成的功能和代码
  • 优化:升级 cobble 包版本为 4.5.4
  • 优化:IncludeRule 逻辑使其拼出的 SQL 不在出现多余的空格
  • 优化:lambdaUpdate/Delete/Query 兼容 tableMapping 没有匹配到任何列的极端情形
  • 优化:Mapping 逻辑减少 TableDefaultInfo 的构建次数
  • 优化:dtd/xsd 验证逻辑调整,entity 的 table 属性是可选的,如果省略 table 配置则实体类必须标有 @Table 注解
  • 优化:针对 H2 2.2.220 版本的兼容性问题
  • 优化:单元测试代码,提升覆盖率/修复测试Case问题,目前 834 个单元测试全部正常,行覆盖率提升到 77%,类覆盖率提升到 92%
  • 优化:DalSession 在调用 createMapper 时候不必强制要求 Mapper 接口必须标记 @xxMapper 注解,它会自动探测 DalRegistry
  • 优化:ExecuteInvocationHandler 逻辑针对接口 default 调用实现参考 mybatis 兼容 java8 和 java9

修复​

  • 修复:报错内容不正确,始终是空指针异常的问题(社区用户 aqnghu 贡献)
  • 修复:lambdaInsert 当自增列配置为不参与 insert 时自增数据不回填的问题
  • 修复:mapper 文件级 MappingOptions 不生效的问题(优先级顺序为:table -> mapper 文件级 -> 全局)
  • 修复:Oracle 使用 InsertLambda 批量 insert 失败的问题
  • 修复:SqlXmlForReaderTypeHandler 类无法正常工作的问题
  • 修复:BaseMapper 接口中 updateById 会强制把 id 也带上的问题

相關推薦

2023-06-14

介绍 dbVisitor 是一个轻量小巧的数据库开发工具,支持 ORM、数据生成工具 / 数据库性能测试。具有对象映射以及丰富的类型处理。提供动态 SQL、存储过程、 内置分页方言 20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略

2024-02-08

介绍 dbVisitor 是一个全功能数据库访问 ORM 工具,提供对象映射、丰富的类型处理、动态 SQL、存储过程、 内置分页方言 20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句 / 多结果。并兼容 Spring 及 MyBatis 用法。

2023-02-27

介绍 dbVisitor 是一个轻量小巧的数据库开发工具,支持ORM、数据生成工具/数据库性能测试。具有对象映射以及丰富的类型处理。提供动态 SQL、存储过程、 内置分页方言 20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、

2024-04-27

介绍 dbVisitor 是一个全功能数据库访问 ORM 工具,提供对象映射、丰富的类型处理、动态 SQL、存储过程、 内置分页方言 20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句 / 多结果。并兼容 Spring 及 MyBatis 用法。

2023-01-16

介绍 dbVisitor 是一个全功能数据库访问 ORM 工具,提供对象映射、丰富的类型处理、动态 SQL、存储过程、 内置分页方言 20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句 / 多结果。并兼容 Spring 及 MyBatis 用法。

2023-07-13

介绍 dbVisitor 是一个全功能数据库访问 ORM 工具,提供对象映射、丰富的类型处理、动态 SQL、存储过程、 内置分页方言 20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句 / 多结果。并兼容 Spring 及 MyBatis 用法。

2023-04-15

。 解决关联查询在某情况下join条件丢失问题。  Mybatis-Milu是基于mybatis的超轻量ORM拓展框架,遵循JPA注解规范,让查询聚焦在实体与实体关系之中。

2024-06-17

官方文档:http://mybatis-mp.cn 1.5.8 正式发布 1. SQL with 优化,支持with 递归 2. 增加orderByDesc 方法 3:order by nulls first last 适配 4:兼容人大金仓数据库 5:兼容clickhouse 6:修复模板包含列别名的问题 7:优化update set 增加when

2023-11-26

全新一代基于 mybatis 扩展的 orm 框架,拥有良好的性能和扩展性。 1:基于注解,映射数据库; 2:支持多表 join 和返回; 3:api 采用 lambda 和 stream 流式设计; 4:内置分页以及超强的 sql 优化功能; 5:稳定且性能极优; 6:

2023-12-12

全新一代基于 mybatis 扩展的 orm 框架,拥有良好的性能和扩展性。 1:基于注解,映射数据库; 2:支持多表 join 和返回; 3:api 采用 lambda 和 stream 流式设计; 4:内置分页以及超强的 sql 优化功能; 5:稳定且性能极优; 6:

2024-07-24

mybatis-mp是一款真正意义上ORM框架,绝对好用的不行!!! 官方文档:https://mybatis-mp.cn 1.6.0 rc1 发布 1:减少生成器maven依赖 2:增加多主键兼容   10 大与众不同的亮点: 1:mybatis-mp - 亮点一:可自定义动态默

2024-02-01

题 2.升级springboot3版本 3.兼容xml resultmap自定义映射   mybatis-mp 包含丰富的 api: 1:基于注解,映射数据库; 2:支持多表 join 和返回; 3:api 采用 lambda 和 stream 流式设计; 4:select 自动化以及结果 1 对 1,1 对多,超级方便

2024-06-01

官方文档:http://mybatis-mp.cn 1.5.3 更新: 1:优化分页paging,让开发者可以继承Pager,并分页是无需再转换 2:兼容普通VO,实现字段名映射,lambda映射,例如:.selectWithFun(SysAuthority::getParentId, c -> c.as(Tree::getParentId)) 3:修复sql模板

2024-05-29

官方文档:http://mybatis-mp.cn 1.5.1更新: 1.修复了多数据源 springboot3下报错的问题 2.部分数据库函数同时兼容各数据库 3.增加不同数据库执行不同sql功能 SysUser sysUser = QueryChain.of(sysUserMapper) .select(SysUser::getId) .onDB(DbType.H2, queryC