# 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; // 设置执行优先级
}
}
```