# 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; } ```