当前位置: 首页
科技数码
xbatis 1.9.7 版本正式发布 全新2026年最好用的基于MyBatis的ORM框架

xbatis 1.9.7 版本正式发布 全新2026年最好用的基于MyBatis的ORM框架

热心网友 时间:2026-06-28
转载

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 协同开发体验,querywhere 模块新增 tableAs(实体类, 别名) 方法,支持灵活指定表别名,SQL 编写更自由。

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 是一款兼具强大性能与极致易用性的新一代 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;
}
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

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
云米科技CEO奖励员工小米YU7 期待未来再奖励更多台

云米科技CEO奖励员工小米YU7 期待未来再奖励更多台

云米科技创始人兼CEO陈小平通过社交平台正式揭晓了公司年会上的“重磅大奖”:一辆小米YU7汽车,专为表彰一位长期服务核心客户、始终坚守岗位并成功推动项目实现关键突破的员工。获奖理由简洁而有力——“尽职尽责、持之以恒”。陈小平在现场还定下目标:“希望到2026年,能送出更多台车。” 这句话,既是对员工

时间:2026-07-08 12:45
腾讯开源Node模块联邦方案hel-micro-node

腾讯开源Node模块联邦方案hel-micro-node

腾讯近日正式发布开源项目 hel-micro-node,作为 hel+ 生态体系中的核心组件,专门为 Node js 运行环境量身打造,旨在提供一种轻量化、高效率且易于使用的服务端模块联邦解决方案。与同类产品 @module-federation node 相比,hel-micro-node 在功能

时间:2026-07-08 12:44
doc个人图书馆因业务调整无偿转让寻找接管方

doc个人图书馆因业务调整无偿转让寻找接管方

日前,知识分享平台“360doc个人图书馆”正式对外发布官方公告。自2005年上线以来,这一经典数字图书馆已稳健运营整整二十年,累计服务用户超过八千万,沉淀文章数量突破十一亿篇。作为国内知名的免费知识管理公益平台,它不仅承载了无数人的智慧积累与珍贵记忆,更在个人知识存档与内容管理领域保持了独特的品牌

时间:2026-07-08 12:44
iPhone Air 2最新传闻 散热与双扬声器及双摄成重点

iPhone Air 2最新传闻 散热与双扬声器及双摄成重点

细想起来,距离苹果那款备受期待的超薄系列新机——我们暂时称之为iPhone Air 2——正式亮相,其实已经不到一年了。产业链上陆续传出的消息都在暗示,苹果这次决心放一个大招,在散热、音频、影像这几个核心体验上动真格的。 iPhone Air 销量与市场反响 此前不少舆论认为初代iPhone Air

时间:2026-07-08 12:44
上海交大今日正式发布自研光学垂直大模型

上海交大今日正式发布自研光学垂直大模型

光学领域最近迎来了一位重量级新成员——上海交通大学正式推出了面向光学垂直方向的大模型Optics GPT。官方将其定义为一位“数字光学顾问”,听起来可能有点抽象,但说白了,就是让一个AI系统把光学领域的所有核心知识吃透,然后能稳稳当当地帮科研、工程和教学解决问题。 如果拿ChatGPT这类通用大模型

时间:2026-07-08 12:44
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜