讲师中心 微信公众号
AI工具推荐 视频效率加速

BeetlSQL 3.37 发布,增加多对多自动 Fetch

夏涛酱_5510

夏涛酱_5510

发布时间:2026-01-20 18:33:09

|

372人浏览过

|

来源于php中文网

原创

beetlsql 3.37 发布,增加多对多自动 fetch

BeetlSQL 自 2015 年启动研发,所有核心模块及周边生态组件均为自主研发。其设计目标是打造一个开发便捷、维护简单、运行高效的数据库访问框架,具备广泛的适用性、高度的可定制能力以及极低的学习门槛。

查阅文档 源码仓库 示例项目 在线试用 多数据库支持 性能压测 插件体系

本次版本更新内容如下:

  • 修复 SQL Server 在特定场景下无法正确读取表元数据的问题
  • Fetch 功能新增对多对多关系的自动加载支持
  • 升级底层模板引擎 Beetl 至最新版 3.20.1

Fetch 新增注解 @FetchMany2Many,配套提供 FetchMany2ManyAction 类(供 @Builder 注解使用),可通过中间表完成多对多关联数据的自动拉取。

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD, ElementType.FIELD})
@Builder(FetchMany2ManyAction.class)
public @interface FetchMany2Many {
    // 中间表对应的实体类
    Class tableClass();
    String fromAttr(); // 当前实体在中间表中的外键字段名
    String toAttr();     // 关联实体在中间表中的外键字段名
    String enableOn() default ""; // 启用条件表达式(可选)
}

使用示例如下:

jm-jsjkxyjs02-pzl-803
jm-jsjkxyjs02-pzl-803

查询全球任意城市的实时天气和未来天气预报

下载
@Table(name="sys_user")
public class MyUser {
    @AutoID
    Integer id;
    String name;
    @FetchMany2Many(tableClass = UserRole.class, fromAttr = "userId", toAttr = "roleId")
    List<Role> roles;
}

BeetlSQL 核心模块说明

BeetlSQL 核心 功能
sql-core 基础核心包,封装 JDBC 调用、SQL 文件管理、注解解析等核心能力
sql-fetch 提供类似 Hibernate 的 `@Fetch`、`@FetchMany` 等懒加载/预加载注解支持
sql-mapper Mapper 接口定义与扩展机制,支持用户自定义 Mapper 及其专属注解
sql-intergration 集成主流框架(如 Spring、Solon、JFinal)的适配器与完整示例
sql-query Query 与 LambdaQuery 接口,支持通过 Java API 构建并执行 SQL
sql-mapping 单表/多表与 POJO 的双向映射能力,支持 JSON、XML 或约定优先等多种配置方式
sql-template 基于 Beetl 模板引擎实现 SQL 渲染,同时兼容其他模板语言扩展
sql-gen 代码生成抽象层,内置默认实现,可一键生成 DAO、SQL 文件、接口文档等
sql-db-support 覆盖 33+ 种数据库的兼容性测试与驱动验证
sql-samples 涵盖上百个典型业务场景的实战案例
sql-test 包含数百个高质量单元测试用例,保障稳定性与可靠性

BeetlSQL 官方扩展插件列表

BeetlSQL 扩展包 功能
sql-xml 仿 MyBatis XML 风格语法支持,适合习惯用 XML 编写 SQL 的开发者
sql-accelerator 性能增强插件,通过反射优化、缓存策略等手段,使性能提升 50%–200%,逼近手写 JDBC 效率
sql-firewall SQL 防御模块,防止误操作导致的数据破坏或敏感信息泄露
sql-dynamic-table 动态表访问支持,让程序像操作静态表一样处理运行时创建的表结构
sql-bean-encrypt 字段级加解密支持,内置 `@MD5`、`@AES` 等常用加密注解
sql-rewrite SQL 重写引擎,支持单表多租户、逻辑删除、数据权限控制等功能
SAGA(实验性) 基于 SAGA 模式的分布式事务实现,服务于微服务架构下的事务一致性需求

启用加速插件后的性能对比:最高可达原生 JDBC 性能的一半左右

查询类型 测试场景 BeetlSQL(ops/ms) 纯 JDBC MyBatis JPA
beetlsqlExecuteJdbc 直接执行 JDBC 语句 318 678 / 64
beetlsqlExecuteTemplate 执行 Beetl SQL 模板 268 / 44 66
beetlsqlFile SQL 统一存放于文件中管理 266 / 41 /
beetlsqlInsert 单条记录插入 129 248 43 59
beetlsqlGetAll 全量数据查询 13 40 4 5
beetlsqlLambdaQuery 使用 LambdaQuery 构建并执行查询 196 / 9 /
beetlsqlPageQuery 分页查询操作 159 / 17 59
beetlsqlSelectById 根据主键查询单条记录 259 670 43 61

JMH 基准测试结果(单位:ops/ms)

Benchmark                                  Mode  Cnt     Score      Error   Units
Beetl.addEntity                           thrpt    5   133.190 ±   38.548  ops/ms
Beetl.complexMapping                      thrpt    5   236.289 ±  288.370  ops/ms
Beetl.executeJdbcSql                      thrpt    5   298.657 ±   80.480  ops/ms
Beetl.executeTemplateSql                  thrpt    5   251.418 ±   77.757  ops/ms
Beetl.getAll                              thrpt    5    14.531 ±    0.605  ops/ms
Beetl.getEntity                           thrpt    5   359.275 ±   85.099  ops/ms
Beetl.lambdaQuery                         thrpt    5   187.228 ±   59.697  ops/ms
Beetl.one2Many                            thrpt    5   178.041 ±  181.829  ops/ms
Beetl.pageQuery                           thrpt    5   148.982 ±   39.327  ops/ms
Beetl.sqlFile                             thrpt    5   249.206 ±  100.083  ops/ms
DBVisitor.addEntity                       thrpt    5    99.294 ±   33.564  ops/ms
DBVisitor.executeJdbcSql                  thrpt    5   185.177 ±   50.993  ops/ms
DBVisitor.executeTemplateSql              thrpt    5     3.189 ±    0.748  ops/ms
DBVisitor.getAll                          thrpt    5     3.163 ±    0.980  ops/ms
DBVisitor.getEntity                       thrpt    5   125.683 ±   44.190  ops/ms
DBVisitor.lambdaQuery                     thrpt    5    94.314 ±   38.499  ops/ms
DBVisitor.pageQuery                       thrpt    5    49.954 ±   18.254  ops/ms
EasyQuery.addEntity                       thrpt    5    98.904 ±   39.890  ops/ms
EasyQuery.complexMapping                  thrpt    5    67.397 ±   59.919  ops/ms
EasyQuery.executeJdbcSql                  thrpt    5   243.160 ±   48.080  ops/ms
EasyQuery.getAll                          thrpt    5    14.896 ±    2.219  ops/ms
EasyQuery.getEntity                       thrpt    5   134.370 ±   67.962  ops/ms
EasyQuery.lambdaQuery                     thrpt    5   137.292 ±   53.438  ops/ms
EasyQuery.one2Many                        thrpt    5    75.083 ±   53.738  ops/ms
EasyQuery.pageQuery                       thrpt    5    84.596 ±   46.942  ops/ms
Flex.addEntity                            thrpt    5    86.484 ±   40.022  ops/ms
Flex.getAll                               thrpt    5     2.926 ±    0.993  ops/ms
Flex.getEntity                            thrpt    5    73.445 ±   39.437  ops/ms
Flex.pageQuery                            thrpt    5    33.999 ±   26.776  ops/ms
Jdbc.addEntity                            thrpt    5   225.223 ±  304.585  ops/ms
Jdbc.executeJdbcSql                       thrpt    5   691.616 ±  145.280  ops/ms
Jdbc.getAll                               thrpt    5    35.827 ±    7.295  ops/ms
Jdbc.getEntity                            thrpt    5   678.791 ±  165.527  ops/ms
Jpa.addEntity                             thrpt    5    53.219 ±   78.543  ops/ms
Jpa.executeJdbcSql                        thrpt    5    60.734 ±   61.299  ops/ms
Jpa.executeTemplateSql                    thrpt    5    64.478 ±   48.688  ops/ms
Jpa.getAll                                thrpt    5     4.710 ±    2.062  ops/ms
Jpa.getEntity                             thrpt    5    56.325 ±   53.744  ops/ms
Jpa.one2Many                              thrpt    5    92.168 ±  111.591  ops/ms
Jpa.pageQuery                             thrpt    5    58.756 ±   48.056  ops/ms
MyBatis.addEntity                         thrpt    5    40.533 ±   12.461  ops/ms
MyBatis.complexMapping                    thrpt    5   106.348 ±   57.688  ops/ms
MyBatis.executeTemplateSql                thrpt    5    46.953 ±   13.541  ops/ms
MyBatis.getAll                            thrpt    5     5.394 ±    0.502  ops/ms
MyBatis.getEntity                         thrpt    5    45.303 ±   11.928  ops/ms
MyBatis.lambdaQuery                       thrpt    5    23.756 ±   13.613  ops/ms
MyBatis.pageQuery                         thrpt    5    16.190 ±    5.682  ops/ms
MyBatis.sqlFile                           thrpt    5    42.558 ±   18.025  ops/ms
SqlUtils.addEntity                        thrpt    5   232.501 ±  332.656  ops/ms
SqlUtils.executeJdbcSql                   thrpt    5   682.610 ±  171.506  ops/ms
SqlUtils.getAll                           thrpt    5    44.353 ±    4.346  ops/ms
SqlUtils.getEntity                        thrpt    5   643.873 ±  131.587  ops/ms
Wood.addEntity                            thrpt    5   105.097 ±   79.961  ops/ms
Wood.executeJdbcSql                       thrpt    5   127.020 ±   48.142  ops/ms
Wood.executeTemplateSql                   thrpt    5   129.193 ±   44.455  ops/ms
Wood.getAll                               thrpt    5     2.051 ±    0.524  ops/ms
Wood.getEntity                            thrpt    5   126.104 ±   41.976  ops/ms
Wood.lambdaQuery                          thrpt    5   125.013 ±   43.991  ops/ms
Wood.pageQuery                            thrpt    5   220.101 ±   90.028  ops/ms
Wood.sqlFile                              thrpt    5   132.431 ±   50.141  ops/ms

源码获取地址:点击下载

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

3743

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

791

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

969

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

5521

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2503

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

5520

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

7181

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

970

2024.04.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn