Xbatis:持久层代码直降 2/3,多版本更新带来强大功能升级!
2026/6/26 17:42:41 网站建设 项目流程

推荐理由

强、强、强!单表、连表操作,不想连表也不怕,直接少写 1/3 甚至 2/3 的持久层代码;API 简单、快捷、优雅、简洁,构建 SQL 能力超强!用过和没用过的都来体验,即便有了 AI,真正好用的 ORM 仍不可忽视,除非以后不维护。

1.10.5 - 2026-06-21

- 修复插入数据时,未拼上@Table的schema的问题。

- 增加[局部某个表leftJoin禁止优化](https://xbatis.cn/zh-CN/intro/sql-optimize.html#%E5%A6%82%E6%9E%9C%E5%A6%82%E4%BD%95%E5%85%B3%E9%97%AD-sql%E4%BC%98%E5%8C%96)的功能。

- 其他优化。

- 增加[SQL审计](https://xbatis.cn/zh-CN/function/core/audit.html)。

1.10.3 - 2026-05-27

- [@Fetch fetchFilter 强制调用开关](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fannotation%2Ffetch.html%23%25E5%25B1%259E%25E6%2580%25A7%25E8%25AF%25B4%25E6%2598%258E)。

- 数据库识别支持 p6spy jdbc url 格式。

- [其他优化 表名 /schema 支持动态设置](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fannotation%2Ftable.html%23_4%25E8%25A1%25A8%25E5%2590%258Dschema-%25E5%258A%25A8%25E6%2580%2581%25E8%25AE%25BE%25E7%25BD%25AE%25E9%259D%259E%25E5%2588%2586%25E8%25A1%25A8%25E8%25A1%258C%25E4%25B8%25BA)(非分表行为)。

- crud 支持自己创建的 lambda getter 方法引用,例如: `.eq(EntityLambdaUtil.createSetter(SysUser.class, "id"), 1)`。

- 修复单列 Fetch 数据库为 null 时运行异常的问题。

- [增加 nested 方法来替代 orNested 和 andNested](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fcore%2FQueryChain.html%23and-%25E6%2588%2596-or-%25E4%25B8%2580%25E4%25B8%25AA%25E5%25AD%2590%25E6%259D%25A1%25E4%25BB%25B6)。

- [增加 where 方法平替 and or 动态方法](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fcore%2FQueryChain.html%23%25E5%258A%25A8%25E6%2580%2581%25E6%259D%25A1%25E4%25BB%25B6)。

- [新增 getValueById (获取单列值) 方法](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fbase%2Fget-query.html%23mapper-%25E5%2586%2585%25E7%25BD%25AE%25E6%2596%25B9%25E6%25B3%2595)。

- [QueryChain 增加 mapGroupWithKey 分组功能](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fbase%2FmapWithKey-query.html%23mapper-%25E5%2586%2585%25E7%25BD%25AE%25E6%2596%25B9%25E6%25B3%2595)。

1.10.2 - 2026-04-29

- [实现 @Fetch, 支持生效条件](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fannotation%2Ffetch.html%23fetch-%25E7%2594%259F%25E6%2595%2588%25E6%259D%25A1%25E4%25BB%25B6)。

- in/notIn 单条时,变成 eq/ne 行为。

- 其他优化。

1.10.1 - 2026-04-27

- 优化 @Fetch 功能代码。

- [实现 @Fetch 更多合并的功能场景](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fannotation%2Ffetch.html%23fetch-%25E5%2590%2588%25E5%25B9%25B6%25E6%259F%25A5%25E8%25AF%25A2)(从 2 层到 1 层转变,减少 VO 创建)。

- [@Fetch 注解增加逻辑删除策略(支持忽略逻辑删除)](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fannotation%2Ffetch.html%23%25E5%25B1%259E%25E6%2580%25A7%25E8%25AF%25B4%25E6%2598%258E)。

1.10.0 - 2026-04-18

- 修复主动调用了 fetchFilter/fetchEnable 时,可能出现报错的问题(未使用 fetchFilter/fetchEnable 的不影响)。

1.9.9 - 2026-04-13

- [增加 partialUpdate 精准 (局部) 修改方法](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fbase%2Fupdate.html%23%25E7%25B2%25BE%25E5%2587%2586-%25E5%25B1%2580%25E9%2583%25A8-%25E4%25BF%25AE%25E6%2594%25B9)。

- [原生 updateBatch 修改增加 null / 默认值忽略设置方法](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fbase%2Fupdate.html%23%25E5%258E%259F%25E7%2594%259Fsql%25E6%2589%25B9%25E9%2587%258F%25E4%25BF%25AE%25E6%2594%25B9-%25E6%258C%2587%25E5%25AE%259A%25E4%25BF%25AE%25E6%2594%25B9%25E7%25AD%2596%25E7%2595%25A5)。

- LambdaUtil 类增加 setter/getter Lambda 生成方法。

- [@ResultCalcField 注解支持数据库函数](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fannotation%2FresultCalcField.html%23%25E9%2585%258D%25E7%25BD%25AE%25E6%2596%25B9%25E5%25BC%258F%25E4%25BA%258Corm-%25E5%2587%25BD%25E6%2595%25B0)。

- 修复 exists/notExists 中子查询嵌套子查询时,别名一致导致无法上下级引用的问题。

- 增加 [join 子查询的简化写法](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fbase%2Fjoin-query.html%23join%25E5%25AD%2590%25E6%259F%25A5%25E8%25AF%25A2-%25E6%2596%25B9%25E5%25BC%258F1-%25E6%258E%25A8%25E8%258D%2590)。

- 所有 Mp 开头的类 改为 Xbatis 开头。

- 优化 selectIgnore 功能,不再要求先 select。

- 增加 orderByAsc 方法,减少从 mybatis-plus 迁移到 xbatis 的工作量。

- 优化底层代码。

- [增加 resultmap 官方动态映射继承](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Fintro%2FresultMapExtend.html%23xml-resultmap-%25E5%258A%25A8%25E6%2580%2581%25E7%25BB%25A7%25E6%2589%25BF%25E5%25AE%2598%25E6%2596%25B9%25E9%2585%258D%25E7%25BD%25AE)。

- 所有查询完美兼容 pageHelper。

- 对于顶级类的字段增加列为为字段名的 resultMap 映射。

- 支持[多列 in-notIn 操作](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Fdemo%2Fother-hard.html%23%25E5%25A4%259A%25E5%2588%2597in-notin%25E6%259D%25A1%25E4%25BB%25B6)。

- [@Fetch 支持合并查询](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fxbatis.cn%2Fzh-CN%2Ffunction%2Fannotation%2Ffetch.html%23fetch-%25E5%2590%2588%25E5%25B9%25B6%25E6%259F%25A5%25E8%25AF%25A2)(从 2 层到 1 层转变,减少 VO 创建)。

1.8.7 更新内容

1. 为了更好的 JAVA+XML 结合,query 和 where 增加 tableAs (实体类,别名) 方法,用于自定义表名别名。

2. XbatisConfig 改为 XbatisGlobalConfig。

3. 增加[逻辑删除拦截器](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fxbatis.cn%252Fzh-CN%252Ffunction%252Fcore%252FlogicDelete.html)。

4. [update](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fxbatis.cn%252Fzh-CN%252Ffunction%252Fbase%252Fupdate.html)、[delete](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fxbatis.cn%252Fzh-CN%252Ffunction%252Fbase%252Fdelete.html) 增加 原生 RETURNING (原生) 功能。

5. 增加原生 sql 查询方法和 [update delete RETURNING 功能](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fxbatis.cn%252Fzh-CN%252Ffunction%252Fcore%252FnativeSQL.html)。

6. 增加了一个 [Mapper 方法拦截器](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fxbatis.cn%252Fzh-CN%252Ffunction%252Fcore%252FmethodInterceptor.html)。

7. 增加 [exists/not exists 简易写法](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fxbatis.cn%252Fzh-CN%252Fdemo%252Fother-hard.html%2523exists)。

通用 SQL 扩展

- 类型支持 实体类,VO 和普通 POJO。

java SysUser user = sysUserMapper.select(SysUser.class, "select * from t_sys_user where id =?", 1);

- 支持增删改,且支持返回数据。

java String user_name = sysUserMapper.executeAndReturning(String.class, "update t_sys_user set user_name=? where id=1 RETURNING user_name", "xxx");

- ORM 写法 删除并返回被删除的数据(数据库原生操作)。

java List list = DeleteChain.of(sysUserMapper) .in(SysUser::getId, 1, 2) .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturningList();

- ORM 写法 修改并返回修改后的数据(数据库原生操作)适合金额加减操作返回剩余金额。

java SysUser sysUser = UpdateChain.of(sysUserMapper) .eq(SysUser::getId, 1) .set(SysUser::getUserName, "abc2") .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturning();

分表配置

java @Data @SplitTable(SysUserSplitter.class) public class SysUser { @TableId private Integer id; @SplitTableKey private Integer groupId; private String nickname; private String username; }
java public class SysUserSplitter implements TableSplitter { @Override public boolean support(Class type) { return type == Integer.class || type == int.class; } @Override public String split(String sourceTableName, Object splitValue) { Integer groupId = (Integer) splitValue; //分成10个表 return sourceTableName + "_" + groupId % 10; } }

分表就是这么简单,其他操作和常规无异!

1.7.7 更新内容

- QueryChain、DeleteChain、InsertChain、UpdateChain 支持 BasicMapper 方法。

- 支持通用 BasicMapper,可不需要创建多个实体类 Mapper;一个 BasicMapper 即可使用所有功能。

- 正式支持单 Mapper (写一个 Mapper 即可)。

为什么推荐 xbatis?

xbatis 是一款超级强大的 ORM 框架:

1. 可多表 join(不再只能单表了)。

2. 代码分页,xml 还可以分页(可以不用 pagehelper 了)。

3. 良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强)。

4. 强大的各种数据库适配,可在一套代码中 实现多个数据库适配;真正的 ORM hibernate 都做不到。

6. 极简的 api 设计,让开发者 不再迷糊。

1. 单表 +@Fetch 注解 + fetchFilter 方法

java @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime create_time; @Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id") private List sysRoles; }
java List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles,where->where.eq(SysRole::getStatus,1)) .returnType(SysUserVO.class) .list();

fetchFilter 方法是对 @Fetch 注解的增强,没有特殊要求一般,可忽略。

2. 单表查询

java SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .get();

3. VO 映射

java @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; }
java SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .returnType(SysUserVO.class) .list();

4. join 查询

java @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; //映射一个对象 1对1 @NestedResultEntity(target = SysRole.class) private SysRole sysRole; //映射多个对象 1对多 @NestedResultEntity(target = SysRole.class) private List sysRoles; }
java List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list();

还有很多很多超级方便有趣的写法,欢迎大家来使用:[https://xbatis.cn](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fxbatis.cn)

例如:

1. 多表 join A 内嵌 B B 内嵌 C 都可以。

2. 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B。

3. 使用 @Paging 注解 实现你的 xml 自动分页。

4. 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询