# LunaSQL
**Repository Path**: xiaovcloud/LunaSQL
## Basic Information
- **Project Name**: LunaSQL
- **Description**: LunaSQL 是一个创新的跨数据库SQL执行引擎,旨在简化数据库适配过程,减少开发人员在处理不同数据库系统时产生的额外工作。通过 LunaSQL,您可以在程序中编写标准的MySQL语句,并在运行时无缝切换到任意支持的数据库类型,无需修改原始SQL代码。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: develop
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-03-14
- **Last Updated**: 2025-08-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LunaSQL - 跨数据库SQL执行引擎
## 简介
LunaSQL 是一个创新的跨数据库SQL执行引擎,旨在简化数据库适配过程,减少开发人员在处理不同数据库系统时产生的额外工作。通过 LunaSQL,您可以在程序中编写标准的MySQL语句,并在运行时无缝切换到任意支持的数据库类型,无需修改原始SQL代码。
## 主要功能
- 标准SQL编写:允许开发人员使用标准的MySQL语法编写SQL语句,无需担心目标数据库的特定语法或差异。
- 动态数据库切换:在程序运行时,可以轻松更改目标数据库引擎,无需重新编写或调整SQL代码。
- 减少适配工作:LunaSQL 减少了开发人员处理不同数据库系统时所需的适配工作,提高了开发效率和可维护性。
- 强大的兼容性:支持多种流行的数据库系统,包括但不限于 MySQL, PostgreSQL, SQLite, SQL Server 等。
- 性能优化:LunaSQL 引擎对SQL查询进行了优化,以确保在不同数据库系统上的最佳执行性能。
- 易于集成:提供简单易用的API和库,方便集成到各种应用程序和框架中。
## 如何使用
1. 添加依赖:将LunaSQL的依赖添加到您的项目中。
```xml
org.xiaov.lunasql
luna-sql-engine
0.0.1-M1
```
2. 编写SQL:使用标准的SQL语法编写您的查询。
```java
String sql = """
SELECT u.username, GROUP_CONCAT(r.rolename SEPARATOR ', ') AS roles
FROM t_user u
LEFT JOIN t_user_role ur ON u.user_id = ur.user_id
LEFT JOIN t_role r ON ur.role_id = r.role_id
WHERE u.age > 30
and u.age < 40
GROUP BY u.user_id, u.username limit 0,20;""";
```
3. 执行查询:使用LunaSQL的API执行查询,并指定目标数据库。
```java
String result = TransformManager.INSTANCE.parseSQL(sql, DbType.oracle);
/* 生成的sql如下:
SELECT u.username, listagg(r.rolename, ', ') WITHIN GROUP ( ORDER BY r.rolename) AS roles
FROM t_user u
LEFT JOIN t_user_role ur ON u.user_id = ur.user_id
LEFT JOIN t_role r ON ur.role_id = r.role_id
WHERE u.age > 30
AND u.age < 40
AND ROWNUM <= 20
GROUP BY u.user_id, u.username;
*/
```
## 在SpringBoot中使用
在SpringBoot中使用LunaSQL,只需在您的SpringBoot应用程序中添加LunaSQL的依赖即可。
在执行sql的时候会自动帮助转换为对应数据库类型的sql执行
```xml
org.xiaov.lunasql
luna-sql-springboot
0.0.1-M1
```
## 注意事项
### 在MP集成中使用分页功能,需要将分页数据库方言类型设置为MySQL
eg:
```java
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
```