商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 硬件相关 > 2026 最好用的 ORM 框架:xbatis 1.9.7 正式发布,基于 mybatis 的 ORM 框架

2026 最好用的 ORM 框架:xbatis 1.9.7 正式发布,基于 mybatis 的 ORM 框架

  发布于2026-08-25 阅读(0)

扫一扫,手机访问

1.9.7 版本更新日志

先说几个更新方向的判断。最近几个版本释放了不少实用能力,尤其是对开发效率和可扩展性的打磨。下面分版本展开。

  • 1:VO 字段注解现在可以更灵活了——通过 set 方法上的注解,就能覆盖默认行为。
  • 2:数据库类型适配能力增强,新增对自定义 DbType 的全面支持。
  • 3:getById 方法扩展,新增 getOptionalById 方法,返回 Optional 类型结果。
  • 4:QueryChain 新增 Optional 相关方法,与 get() 方法形成配套支持。
  • 5:内置 UUIDv7 主键生成策略,满足高性能、时序安全的主键需求。

1.8.7 版本更新日志

1:为提升 JA VA 与 XML 协同开发体验,querywhere 模块新增 tableAs(实体类, 别名) 方法,支持灵活指定表别名。

2:配置类 XbatisConfig 已重命名为 XbatisGlobalConfig,语义更清晰、结构更统一。

3:新增逻辑删除全局拦截器,开箱即用,无需手动编写删除标记逻辑。

4:updatedelete 操作支持原生 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)
List list = 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:QueryChainDeleteChainInsertChainUpdateChain 全面兼容 BasicMapper 接口方法。
  • 2:正式支持泛型 BasicMapper,无需为每个实体单独定义 Mapper 接口;一套 BasicMapper 即可驱动全部功能。
  • 3:全面支持单 Mapper 架构,仅需定义一个 Mapper 接口即可完成所有数据操作。

为何推荐 xbatis?

xbatis 是一款兼具强大性与易用性的新一代 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;
}
List list = 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; }

List list = QueryChain.of(sysUserMapper)
.from(SysUser.class)
.join(SysUser.class, SysRole.class)
.returnType(SysUserRoleVO.class)
.list();
  1. 支持深层嵌套 JOIN:A → B → C 多层关联一键搞定。
  2. 不依赖 JOIN:通过 @Fetch + fetchFilter 实现“A 查一次 + B 查一次”的优雅替代方案。
  3. XML 分页自动化:添加 @Paging 注解,XML 中自动注入分页逻辑。
  4. SQL 模板加持:让 ORM 更贴近业务,轻松应对复杂 SQL 场景,彻底摆脱框架束缚。
本文转载于:https://www.php.cn/faq/2008924.html?uid=1246273 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

产品推荐

热门关注