1.9.7 版本更新日志
先梳理一下近期的版本迭代方向。过去几个版本陆续释放了多项实用能力,尤其在开发效率与框架可扩展性方面持续精进。以下按版本逐一展开说明。
- 1:VO 字段注解现在支持通过
set方法上的注解灵活覆盖默认映射行为,定制能力更强。 - 2:数据库类型适配能力进一步增强,现已全面支持自定义
DbType扩展。 - 3:
getById方法家族新增getOptionalById方法,返回Optional类型结果,更贴合现代 Java 编程风格。 - 4:
QueryChain新增Optional系列方法,与get()方法形成完整配套,查询体验更流畅。 - 5:内置
UUIDv7主键生成策略,兼顾高性能与时序安全性,满足分布式场景下的主键需求。
1.8.7 版本更新日志
1:为提升 Java 与 XML 协同开发体验,query 和 where 模块新增 tableAs(实体类, 别名) 方法,支持灵活指定表别名,SQL 编写更自由。
2:配置类 XbatisConfig 已正式更名为 XbatisGlobalConfig,命名语义更清晰,整体结构更统一。
3:新增逻辑删除全局拦截器,开箱即用,无需手动编写删除标记逻辑,降低重复劳动。
4:update 与 delete 操作现已支持原生 RETURNING 子句(基于数据库原生语法),可直获取变更后的数据。
5:新增原生 SQL 查询接口,并同步支持 update/delete RETURNING 功能,查询与变更更加灵活。
6:引入通用 Mapper 方法拦截器机制,便于统一处理执行前与执行后的逻辑,扩展更加规范。
7:简化 exists / not exists 场景的写法,提供更直观的链式调用支持,代码可读性显著提升。
通用 SQL 扩展能力
// 支持任意类型:实体类、VO 或普通 POJO SysUser user = sysUserMapper.select(SysUser.class, "select * from t_sys_user where id =?", 1);// 支持增删改操作,并可返回指定字段值(如更新后的新用户名)
String user_name = sysUserMapper.executeAndReturning(String.class, "update t_sys_user set user_name=? where id=1 RETURNING user_name", "xxx");// ORM 风格:删除并返回被删记录(基于数据库原生 RETURNING)
Listlist = DeleteChain.of(sysUserMapper)
.in(SysUser::getId, 1, 2)
.returning(SysUser.class)
.returnType(SysUser.class)
.executeAndReturningList();// ORM 风格:更新并返回更新后的完整对象(适用于金额加减等需确认结果场景)
SysUser sysUser = UpdateChain.of(sysUserMapper)
.eq(SysUser::getId, 1)
.set(SysUser::getUserName, "abc2")
.returning(SysUser.class)
.returnType(SysUser.class)
.executeAndReturning();
分表配置示例
@Data
@SplitTable(SysUserSplitter.class)
public class SysUser {
@TableId
private Integer id;
@SplitTableKey
private Integer groupId;
private String nickname;
private String username;
}
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;
// 按 groupId 取模分 10 张子表
return sourceTableName + "_" + (groupId % 10);
}
}
分表配置逻辑清晰直观,开发者只需关注分片规则,其余 CRUD 操作完全透明,使用体验与单表查询无异。
1.7.7 版本更新日志
- 1:
QueryChain、DeleteChain、InsertChain、UpdateChain全面兼容BasicMapper接口方法,链式操作更统一。 - 2:正式支持泛型
BasicMapper,无需为每个实体单独定义 Mapper 接口;一套BasicMapper即可驱动全部功能,大幅减少样板代码。

- 3:全面支持单 Mapper 架构,仅需定义一个 Mapper 接口即可完成所有数据操作,项目结构更简洁。
为何推荐 xbatis?
xbatis 是一款兼具强大性能与极致易用性的新一代 Java ORM 框架,致力于为开发者提供更流畅的数据操作体验。
1:原生支持多表 JOIN 查询(彻底告别单表限制,关联查询更直接)。
2:同时支持代码级分页与 XML 级分页(无需依赖 PageHelper 等第三方插件,分页方案更自主)。
3:卓越的可扩展性:融合 ORM + SQL 模板双模式(打破传统 ORM 固化瓶颈,扩展自由度极高,灵活应对复杂业务)。
4:深度数据库兼容能力:同一套代码可无缝切换多种数据库(连 Hibernate 都难以做到的跨库一致性,迁移成本极低)。
5:API 设计极度精简,上手零门槛,开发者无需反复查阅文档,专注业务逻辑本身。
1. 单表 + @Fetch 注解 + fetchFilter 方法
@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;
}
Listlist = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles, where -> where.eq(SysRole::getStatus, 1)) .returnType(SysUserVO.class) .list();
fetchFilter 方法是对 @Fetch 注解的增强补充,在常规场景下可选择性忽略,按需使用即可。
2. 单表查询示例
SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName, "admin") .get();
3. VO 映射能力
@Data
@ResultEntity(SysUser.class)
public class SysUserVo {
private Integer id;
private String userName;
// 字段名不一致时通过注解映射
@ResultEntityField(property = "password")
private String pwd;
}
SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName, "admin") .returnType(SysUserVO.class) .get();
4. JOIN 查询支持
@Data
@ResultEntity(SysUser.class)
public class SysUserVo {
private Integer id;
private String userName;
// 字段名不一致时映射
@ResultEntityField(property = "password")
private String pwd;
// 一对一嵌套映射
@NestedResultEntity(target = SysRole.class)
private SysRole sysRole;
// 一对多嵌套映射
@NestedResultEntity(target = SysRole.class)
private List sysRoles;
}
Listlist = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list();
- 支持深层嵌套 JOIN 查询:A → B → C 多层关联可一键搞定,复杂场景轻松应对。
- 不依赖 JOIN 的场景:通过
@Fetch注解 +fetchFilter方法实现“A 查一次 + B 查一次”的优雅替代方案,性能更优。 - XML 分页自动化:添加
@Paging注解,XML 中自动注入分页逻辑,无需手动拼装。 - SQL 模板能力加持:让 ORM 更贴近实际业务,轻松应对复杂 SQL 场景,彻底摆脱框架束缚,回归开发自由。
