首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

告别繁琐SQL:用 Xbatis 重新定义 Java 数据库开发体验

官方网站:https://xbatis.cn * 文档:https://deepwiki.com/xbatis/xbatis * GitHub:https://github.com/xbatis/xbatis 你是否也有这些痛点? 项目有 50 个实体,就要写 50 个 Mapper 接口,重复代码让人崩溃 多表联查写一堆 XML,改个字段名全局搜索替换,还容易漏 多租户、逻辑删除、乐观锁……每个功能都要手写拦截器,费时费力 读写分离配置复杂,运行时切换数据源更是噩梦 如果你用过 MyBatis,这些问题一定不陌生。Xbatis 正是为解决这些痛点而生。 Xbatis 是什么? Xbatis 是一个基于 MyBatis 的增强框架,定位是"少写 SQL、链式 DSL、跨数据库兼容"。 它的核心理念只有一句话:对 MyBatis 只做封装,不做侵入式改造。这意味着你原有的 MyBatis 代码、XML、插件全部可以继续使用,Xbatis 只是在上面加了一层优雅的壳。 核心特性一览 1. 链式 DSL:写查询像写英语 传统 MyBatis 写多表联查,你需要写 XML、手动拼接条件、手动处理结果映射。用 Xbatis,同样的查询变成这样: SysUserRoleVo vo = QueryChain.of(sysUserMapper) .select(SysUser.class, SysRole.class) .from(SysUser.class) .join(SysUser::getRoleId, SysRole::getId) .eq(SysUser::getId, 1) .like(SysUser::getUserName, "abc") .groupBy(SysUser::getId) .having(SysUser::getId, c -> c.count().gt(0)) .orderBy(SysUser::getId) .returnType(SysUserRoleVo.class) .get(); 全程 Lambda 方法引用,字段名拼错了编译直接报错,IDE 自动补全,重构无忧。 2. 单 Mapper 模式:一个接口搞定所有实体 传统项目 100 个实体 = 100 个 Mapper 接口。Xbatis 的单 Mapper 模式让你只需定义一个: // 定义一次 public interface MybatisBasicMapper extends BasicMapper {} // 全局注册 XbatisGlobalConfig.setSingleMapperClass(MybatisBasicMapper.class); 之后所有实体的 CRUD 都通过这一个 Mapper 完成: mybatisBasicMapper.save(new SysUser()); mybatisBasicMapper.deleteById(SysUser.class, 1); QueryChain.of(mybatisBasicMapper, SysUser.class) .eq(SysUser::getId, 1) .list(); 3. 企业级注解生态:开箱即用 多租户、逻辑删除、乐观锁…… 这些企业级需求,Xbatis 用注解一行搞定: @Table public class SysUser { @TableId private Integer id; @TenantId // 多租户自动隔离 private Long tenantId; @LogicDelete(beforeValue = "0", afterValue = "1") @LogicDeleteTime // 逻辑删除 + 删除时间 private Integer deleted; @Version // 乐观锁 private Integer version; } 框架在 SQL 执行阶段自动注入租户条件、自动过滤已删除数据、自动处理版本号 —— 业务代码完全无感知。 需要临时访问已删除数据?一行代码搞定: try (LogicDeleteSwitch ignored = LogicDeleteSwitch.with(false)) { mapper.getById(1); // 此处可查到已删除记录 } 4. 动态数据源路由:读写分离从未如此简单 @DS("slave") // 查询走从库 List<SysUser> list = mapper.list(...); @DS("master") // 写入走主库 void save(SysUser user); 通过spring.ds.routing.*统一配置多数据源、主从分组、连接池参数,还支持 JDBC 配置加密存储,敏感信息不再裸奔。 5. 智能分页优化 Xbatis 的分页不是简单套一层COUNT(*),而是会自动优化分页 SQL: 剔除非必要的LEFT JOIN 移除ORDER BY(COUNT 查询不需要排序) 将SELECT替换为COUNT(*) 大数据量场景下,这个优化能带来显著的性能提升。 6. 启动时 POJO 安全检查 @XbatisPojoCheckScan(basePackages = "com.example.project.pojo") public class ApiApplication { ... } 开启后,应用启动时会自动验证所有 VO、Model、条件对象的结构完整性,字段映射错误、注解遗漏在启动阶段就能发现,而不是等到运行时才爆炸。 快速上手 第一步:添加依赖 <dependency> <groupId>cn.xbatis groupId> <artifactId>xbatis-spring-boot3-starter artifactId> <version>1.9.9-M7 version> dependency> 第二步:定义实体 @Data @Table public class SysUser { @TableId private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime createTime; } 第三步:定义 Mapper public interface SysUserMapper extends MybatisMapper<SysUser> {} 第四步:开始使用 @Service public class UserService { @Autowired private SysUserMapper sysUserMapper; public Pager<SysUser> search(String name, int page) { return QueryChain.of(sysUserMapper) .like(SysUser::getUserName, name) .paging(Pager.of(page, 10)); } } 就这么简单。 与同类框架对比 特性 MyBatis 原生 MyBatis-Plus Xbatis 链式 DSL 无 有(Lambda Wrapper) 有(更接近 SQL 语义) 单 Mapper 模式 无 无 有 多租户自动注入 手写 插件支持 注解驱动,透明 逻辑删除 手写 注解支持 注解支持 动态数据源 手写 需第三方 内置 启动时 POJO 检查 无 无 有 对 MyBatis 侵入性 — 中 极低 适合哪些场景? 中大型 Spring Boot 项目:单 Mapper 模式大幅减少重复代码 多租户 SaaS 平台:租户隔离完全透明,无需业务代码介入 需要读写分离的系统:动态数据源路由开箱即用 AI 辅助开发场景:方法引用 + 类型安全 + 启动检查,AI 生成的代码更可靠 结语 Xbatis 不是要替代 MyBatis,而是让 MyBatis 用起来更爽。它保留了 MyBatis 的所有灵活性,同时补齐了工程化开发中最常见的痛点。 如果你正在寻找一个轻量、高性能、功能完备的 MyBatis 增强方案,不妨给 Xbatis 一个机会。 GitHub:https://github.com/xbatis/xbatis官方文档:https://xbatis.cn

优秀的个人博客,低调大师

🎉这款老牌国产 Java AIO 通信框架终于发新版本了

一个高性能、轻量级的AIO通信框架,为您的应用提供稳定高效的网络通信能力。 亲爱的开发者朋友们,我们荣幸地发布 smart-socket v1.8.0 版本!🎉 在这个版本中,我们专注于根据多年来的实际使用反馈,对框架进行进一步的精简与优化,使其更加聚焦于核心功能,提供更稳定、高效的网络通信体验。 🌟 主要更新内容 1. 精简废弃多个不常用插件 🧹 基于多年来用户的实际使用情况分析,我们在 v1.8.0 中废弃了多个使用率低、实用性不高的插件和组件: BlackListPlugin: 黑名单插件 HeartPlugin: 心跳插件 ReconnectPlugin: 重连插件 SocketOptionPlugin: Socket选项插件 StringProtocol: 字符串协议 💡 迁移提示: 如果您正在使用以上插件,建议从旧版本中直接拷贝相关代码至您的工程中继续使用。此举不会影响现有业务逻辑,同时帮助我们保持框架的核心简洁性。 2. 优化 IdleStatePlugin 超时判定策略 ⏱️ 在 Feat Agent 测试过程中,我们发现 SSE 场景下由于长时间 write 操作闲置会导致连接被意外关闭,进而造成数据读取不完整的问题。 为了解决这一问题,我们对 IdleStatePlugin 的超时判定逻辑进行了重要调整: 之前: 读或写任一操作超时即触发连接关闭 现在: 仅当读且写操作同时满足超时条件时才关闭连接 这一调整有效避免了因单向操作闲置而导致的连接中断问题,提高了连接的稳定性和数据传输的完整性。 3. API 调整与废弃 ⚠️ 为了保持API的一致性和简洁性,我们对部分接口进行了调整: AioQuickClient@getSession 方法的返回类型由 TcpAioSession 调整为 AioSession 废弃 AioSession@getSessionID 方法 🎯 版本设计理念 smart-socket v1.8.0 继续秉承"简洁、实用、高效"的设计理念,在保证核心功能稳定的前提下,持续优化和精简框架结构。我们相信: 移除不常用的特性可以降低维护成本 简洁的API设计有利于提高开发效率 专注核心功能可以让框架更加稳定可靠 📚 学习资源 如果您是 smart-socket 的新用户或者需要了解最新变化,我们为您准备了丰富的学习资源: 官方文档 通信协议新手必读 图解通信框架的调度模型 smart-socket 设计概览 单机百万长连接实战教程 smart-socket使用指南 💌 结语 感谢所有使用和支持 smart-socket 的开发者朋友们!您的反馈和建议是我们不断进步的动力。如果您有任何问题或建议,欢迎通过以下方式联系我们: GitHub:https://github.com/smartboot/smart-socket/issues Gitee:https://gitee.com/smartboot/smart-socket/issues 让我们一起构建更高效、更稳定的网络通信应用!🚀

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册