# BeetlSQL
**Repository Path**: xuejm/beetlsql
## Basic Information
- **Project Name**: BeetlSQL
- **Description**: 简洁方便,功能强大的ORM工具,从2015年开始研发
- **Primary Language**: Java
- **License**: BSD-3-Clause
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 494
- **Created**: 2023-08-03
- **Last Updated**: 2025-07-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
http://ibeetl.com
## 简介
BeetlSQL的目标是提供**开发高效**,**维护高效**,**运行高效**的数据库访问框架,在一个系统多个库的情况下,提供一致的编写代码方式。支持如下数据平台
* 传统数据库:MySQL(国内兼容MySQL协议的各种大数据库),MariaDB,Oracle,Postgres,DB2,SQL Server,H2,SQLite,Derby,神通,达梦,华为高斯,人大金仓,PolarDB等
* 大数据:HBase,ClickHouse,Cassandar,Hive,Doris
* 物联网时序数据库:Machbase,TD-Engine,IotDB
* SQL查询引擎:Drill,Presto,Druid,Trino
* 内存数据库:ignite,CouchBase
BeetlSQL 不仅仅是简单的类似MyBatis或者是Hibernate,或者是二者的综合,BeetlSQL远大理想是对标甚至超越Spring Data,是实现数据访问统一的框架,无论是传统数据库,还是大数据,还是查询引擎或者时序库,内存数据库。
> 直接在线试用BeetlSQL http://121.42.237.11:8080/beetlsql_online/
* 作者: 闲大赋,Gavin.King,Sue,Zhoupan,woate,darren,蚊子
* 开发时间:2015-07
* 网站 http://ibeetl.com
* qq群 636321946,219324263 252010126
**BeetlSQL 核心功能**
| BeetlSQL 核心 | 功能 |
| ---------------- | ------------------------------------------------------------ |
| sql-core | 核心包,封装了 JDBC 操作,SQL 文件管理,可扩展注解管理 |
| sql-fetch | 类似 Hibernate 那样提供 @Fetch,@FetchMany 等注解 |
| sql-mapper | mapper 类定义和扩展,用户可以自定义自己的 mapper 和 mapper 的注解 |
| sql-intergration | 整合 Spring,solon,jfinal 等框架,以及例子 |
| sql-query | Query 和 LambdaQuery,用 Java API 构造和使用 SQL |
| sql-mapping | 支持单表,多表与 POJO 的互相映射,支持 json 定义,xml 定义映射方式,或者约定习俗 |
| sql-template | Beetl 模板实现,且支持其他模板语言 |
| sql-gen | 代码生成抽象包,并提供默认实现可以生成 dao,sql 文件,md 文档 |
| sql-db-support | 各种数据库的测试和验证,支持 20+ 数据库。 |
| sql-samples | 包含了上百个使用 beetlsql 的例子 |
| sql-test | 包含了上百个单元测试例子 |
**BeetlSQL 最新扩展包**
| BeetlSQL 扩展包 | 功能 |
| ----------------- | ------------------------------------------------------------ |
| sql-xml | 高仿 myabtis 的 xml 语法,如果喜欢使用 xml 写 sql 模板的,可以使用此扩展包 |
| sql-accelerator | 性能加速包,通过反射优化,缓存,让 beetlsql 性能提升 50%-200%,接近一半手写 JDBC 的性能 |
| sql-firewall | sql 防火墙,避免不小心写的 sql 破坏数据库 |
| sql-dynamic-table | 支持像访问静态表格那样防火动态表格,简化动态创建表格的业务需求开发 |
| sql-bean-encrypt | 支持 @MD5 ,@AES 等对字段加密解密 |
| sql-rewrite | 采用 sql 重写,支持单表多租户模式,逻辑删除,数据权限功能 |
| SAGA(实验) | BeetSQL 的 SAGA 是实现,用 SAGA 微服务事务 |
使用加速扩展性能优化结果:能达到近一半手写 JDBC 的性能
| 查询 | 测试内容 | BeetlSQL(ops/ms) | 纯 jdbc | mybatis | JPA |
| ----------------------- | -------------------------- | ---------------- | ------- | ------- | ---- |
| beetlsqlExecuteJdbc | 直接执行 JDBC | 318 | 678 | / | 64 |
| beetlsqlExecuteTemplate | 执行 SQL 模板 | 268 | / | 44 | 66 |
| beetlsqlFile | SQL 存放在文件统一管理 | 266 | / | 41 | / |
| beetlsqlInsert | 插入一条 | 129 | 248 | 43 | 59 |
| beetlsqlGetAll | 获取所有数据 | 13 | 40 | 4 | 5 |
| beetlsqlLambdaQuery | Java 函数编写 SQL 执行查询 | 196 | / | 9 | / |
| beetlsqlPageQuery | 翻页查询 | 159 | / | 17 | 59 |
| beetlsqlSelectById | 查询一条 | 259 | 670 | 43 | 61 |
## 文档
BeetlSQL 3.x 使用说明,当前版本](https://www.kancloud.cn/xiandafu/beetlsql3_guide)
社区提供的文档 https://beetlsql-doc.vercel.app
```xml
com.ibeetl
beetlsql
3.${version}
```
[BeetlSQL 2.x 使用说明,旧版本](README2.md)
```xml
com.ibeetl
beetlsql
2.13.3.RELEASE
```
## 适合用户
* 你不想把精力浪费在简单据库增删改查上?BeetlSQL 内置数据库的CRUD功能
* 你是属于以SQL为中心的程序员派别。BeetlSQL提供了较好的SQL管理,以及内置大量SQL
* 你是对代码可维护性有高要求的架构师?BeetlSQL的设计目的就是尽可能提高数据库访问代码可维护性
* 平台级产品需要跨库,支持各种客户数据库的?BeetlSQL 支持各种库,程序员编写一次,能运行到各种数据库
* 系统需要连接多种库,比如连接商品库,连接订单库,或者设备基本信息在MySQL,设备数据在Clickhouse里。BeetlSQL很容易支持各种库,并能一统一的方式使用
* 系统初期单库单表,长期需要多库多表?BeetlSQL很容易实现多库多表而不需要程序员过多关注。
## 编译源码
```bash
git clone https://gitee.com/xiandafu/beetlsql
mvn clean package
# 如果想修改源码
mvn clean install
```
注意:BeetlSQL3 集成了Spring,以及支持大数据等,就算配置了国内镜像,也可能需要很长时间下载大数据依赖包,为了让编译快速通过,你需要进入pom.xml ,屏蔽sql-integration,sql-db-support,sql-jmh三个模块
```
sql-core
sql-mapper
sql-util
sql-fetch
beetlsql
sql-gen
sql-test
sql-samples
sql-xml
sql-saga
```
## 阅读源码例子
可以从模块`sql-samples`中找得到所有例子,或者从`sql-test` 中运行单元测试例子,或者在`sql-integration` 中的各个框架单元测试中找到相关例子。所有例子都是基于H2内存数据库,可以反复运行
以`sql-samples`为例子
sql-samples 又包含了三个模块大约100个例子
* quickstart: BeetlSQL基础使用例子,可以快速了解BeetlSQL3
* usuage: BeetlSQL所有API和功能
* plugin:BeetlSQL高级扩展实例
以usage模块为例子,包含如下代码
* S01MapperSelectSample 15个例子, mapper中的查询演示
* S02MapperUpdateSample 11个例子, mapper中更新操作
* S03MapperPageSample 3个例子,mapper中的翻页查询
* S04QuerySample 9个例子,Query查询
* S05QueryUpdateSample 3个例子,Query完成update操作
* S06SelectSample 14个例子,SQLManager 查询API
* S07InsertSample 8个例子,SQLManager 插入新数据API,主键生成
* S08UpdateSample 6个例子,更新数据
* S09JsonMappingSample 5个例子, json配置映射
* S10FetchSample 2个例子,关系映射
* S11BeetlFunctionSample 2个例子,自定义sql脚本的方法
BeetlSQL提供了saga事物管理一种思路,但目前还是试验版本,欢迎不怕死的人尝试,和我一起完善这部分,其例子可以在saga模块的单元测试中找到
## 代码示例
### 例子1,内置方法,无需写SQL完成常用操作
```java
UserEntity user = sqlManager.unique(UserEntity.class,1);
user.setName("ok123");
sqlManager.updateById(user);
UserEntity newUser = new UserEntity();
newUser.setName("newUser");
newUser.setDepartmentId(1);
sqlManager.insert(newUser);
```
输出日志友好,可反向定位到调用的代码
```
┏━━━━━ Debug [user.selectUserAndDepartment] ━━━
┣ SQL: select * from user where 1 = 1 and id=?
┣ 参数: [1]
┣ 位置: org.beetl.sql.test.QuickTest.main(QuickTest.java:47)
┣ 时间: 23ms
┣ 结果: [1]
┗━━━━━ Debug [user.selectUserAndDepartment] ━━━
```
### 例子2 使用SQL
```java
String sql = "select * from user where id=?";
Integer id = 1;
SQLReady sqlReady = new SQLReady(sql,new Object[id]);
List userEntities = sqlManager.execute(sqlReady,UserEntity.class);
//Map 也可以作为输入输出参数
List