# database-tool **Repository Path**: zhoukai1992/database-tool ## Basic Information - **Project Name**: database-tool - **Description**: 本工具是一个Maven插件,用于将MySQL的XML映射文件(MyBatis Mapper XML)转换为达梦数据库兼容的格式。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-03 - **Last Updated**: 2026-02-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Maven, 达梦, Java, MySQL, Dameng ## README # MySQL到达梦数据库转换工具 本工具是一个Maven插件,用于将MySQL的XML映射文件(MyBatis Mapper XML)转换为达梦数据库兼容的格式。 ## 工具特性 - 支持多种MySQL特有函数到达梦数据库的转换 - 使用策略模式,易于扩展新的转换规则 - 自动扫描并应用所有可用的转换服务 - 支持批量处理多个XML文件 - 保持原有XML格式,只转换SQL语法部分 ## 转换功能说明 当前支持的转换包括但不限于: - DATE_FORMAT函数 → TO_CHAR函数 - JSON_EXTRACT函数 → JSON_VALUE函数 - 各种日期时间函数转换 - 特殊字符和引号处理 - GROUP_CONCAT函数转换等 ## 使用步骤 ### 1. 在项目的pom.xml中添加插件配置 ```properties com.zhoukai.tool database-tool 1.0-SNAPSHOT ${project.basedir}\src\main\resources\com\zhoukai\gbase\dao ${project.basedir}\src\main\resources\com\zhoukai\gbase\damengdao ``` #### 配置说明 **重要提示:** 需要将mysqlDir和damengDir路径修改为实际项目中的路径 - `mysqlDir`:原项目中MySQL XML文件的路径 - `damengDir`:生成达梦XML文件的目标路径 如果项目中有多个MySQL XML文件路径,可以添加多份[Mysql2DmParam](file:///F:/my_project/database-tool/database-tool/src/main/java/com/zhoukai/tool/param/Mysql2DmParam.java)配置 ```properties ${project.basedir}\src\main\resources\com\zhoukai\gbase\dao ${project.basedir}\src\main\resources\com\zhoukai\gbase\damengdao ${project.basedir}\src\main\resources\com\zhoukai\gbase\dao ${project.basedir}\src\main\resources\com\zhoukai\gbase\damengdao ``` ### 2. 修改MyBatis扫描XML的路径 在项目的数据源配置文件中(如[DataSourceConfiguration](file:///F:/my_project/database-tool/database-tool/src/main/java/com/zhoukai/tool/service/ICoverService.java#L110-L112)),需要根据数据库类型动态设置Mapper文件的扫描路径。 例如,在`masterSqlSessionFactory`方法中,将原来的: ```java sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:*DAO.xml")); ``` 修改为: ```java if(StringUtils.equals(DA_MENG_DRIVER, driverClassName)){ // 达梦数据库 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/zhoukai/gbase/damengdao/*DAO.xml")); }else { sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/zhoukai/gbase/dao/*DAO.xml")); } ``` 其中,`DA_MENG_DRIVER`常量定义为: ```java private static final String DA_MENG_DRIVER = "dm.jdbc.driver.DmDriver"; ``` ### 3. 执行插件 在项目根目录执行以下命令启动转换: ```bash mvn mysql2DM ``` 插件将会: 1. 扫描配置的源目录中的所有XML文件 2. 应用所有可用的SQL转换规则 3. 将转换后的文件保存到目标目录 ### 4. 工作原理 该工具的工作流程如下: 1. **扫描阶段**:递归扫描指定的源目录,找出所有XML文件 2. **转换阶段**:使用策略模式,按优先级顺序应用所有转换服务 3. **输出阶段**:将转换后的XML文件保存到目标目录 每个转换服务实现[ICoverService](file:///F:/my_project/database-tool/database-tool/src/main/java/com/zhoukai/tool/service/ICoverService.java)接口,负责特定类型的SQL转换。 ### 5. 扩展新转换规则 如需添加新的SQL转换规则,只需: 1. 创建一个新类继承[ICoverService](file:///F:/my_project/database-tool/database-tool/src/main/java/com/zhoukai/tool/service/ICoverService.java) 2. 实现`coverSql`方法和`order`方法 3. 编译项目,插件会自动扫描并应用新规则 示例: ```java public class NewConvertService extends ICoverService { @Override public String coverSql(String sql) { // 实现具体的转换逻辑 return sql.replace("OLD_SYNTAX", "NEW_SYNTAX"); } @Override public int order() { return 50; // 设置执行优先级 } } ```