mysql适配达梦数据库需要从驱动配置、SQL兼容性、分页语法等多个方面进行修改。以下是详细的适配步骤:
1. 添加达梦数据库驱动依赖
在 `pom.xml` 中添加达梦数据库 JDBC 驱动:
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.1.193</version>
</dependency>
2. 修改数据源配置
application.yml 配置:
spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://localhost:5236/DAMENG?schema=你的模式名&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
username: 用户名
password: 密码
3. MyBatis-Plus 配置调整
创建达梦数据库配置类:
@Configuration
@MapperScan("com.yourpackage.mapper")
public class MybatisPlusConfig {
/**
* 达梦数据库分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(DbType.DM);
paginationInterceptor.setMaxLimit(1000L);
paginationInterceptor.setOverflow(true);
interceptor.addInnerInterceptor(paginationInterceptor);
return interceptor;
}
/**
* 达梦数据库元数据处理器
*/
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseGeneratedKeys(false);
}
}
4. SQL 兼容性处理
4.1 分页查询适配 达梦数据库使用 `ROWNUM` 进行分页,需要修改原有的 MySQL 分页语法:
原MySQL分页:
SELECT * FROM table LIMIT 0, 10
适配达梦
SELECT * FROM (
SELECT TMP.*, ROWNUM ROW_ID FROM (
SELECT * FROM table
) TMP WHERE ROWNUM <= 10
) WHERE ROW_ID > 0
4.2 函数替换
常见函数替换对照表:
| MySQL 函数 | 达梦函数 |
|-----------|----------|
| `NOW()` | `SYSDATE` |
| `DATE_FORMAT()` | `TO_CHAR()` |
| `IFNULL()` | `NVL()` |
| `CONCAT()` | `||` 或 `CONCAT()` |
| `GROUP_CONCAT()` | `WM_CONCAT()` 或 `LISTAGG()` |
| `LIMIT` | `ROWNUM` |
4.3 创建表语句调整
MySQL:
CREATE TABLE user (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
create_time DATETIME
);
达梦:
CREATE TABLE "USER" (
"ID" BIGINT IDENTITY(1,1) PRIMARY KEY,
"NAME" VARCHAR(50),
"CREATE_TIME" DATETIME
);
5. 实体类注解调整
@Data
@TableName(value = "\"USER\"") // 达梦表名需要加引号
public class User {
@TableId(value = "\"ID\"", type = IdType.AUTO)
private Long id;
@TableField(value = "\"NAME\"")
private String name;
@TableField(value = "\"CREATE_TIME\"")
private LocalDateTime createTime;
}
6. 自定义 ID 生成器(可选)
如果需要使用达梦的序列:
@Component
public class DmIdGenerator implements IdentifierGenerator {
@Override
public Long nextId(Object entity) {
// 使用达梦序列
return SnowflakeIdWorker.generateId();
}
}
// 在实体类中使用
@Data
@TableName(value = "\"USER\"")
public class User {
@TableId(value = "\"ID\"", type = IdType.ASSIGN_ID)
private Long id;
// ...
}
7. 事务配置调整
确保事务管理器正常工作:
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
8. 常见问题解决
8.1 大小写敏感问题
达梦数据库默认大小写敏感,建议:
– 表名和字段名使用双引号
– 保持统一的大小写规范
8.2 自增主键处理
达梦使用 `IDENTITY` 而不是 `AUTO_INCREMENT`:
-- 达梦自增主键定义
"ID" BIGINT IDENTITY(1,1) PRIMARY KEY
8.3 日期时间处理
// 在实体类中使用合适的日期类型
@TableField(value = "\"CREATE_TIME\"")
private LocalDateTime createTime;
9. 测试验证
创建测试类验证数据库连接和基本操作:
@SpringBootTest
class DmAdapterTest {
@Autowired
private UserMapper userMapper;
@Test
void testConnection() {
List<User> users = userMapper.selectList(null);
System.out.println("连接成功,数据条数:" + users.size());
}
@Test
void testPagination() {
Page<User> page = new Page<>(1, 10);
Page<User> result = userMapper.selectPage(page, null);
System.out.println("分页查询成功,总记录数:" + result.getTotal());
}
}
注意事项:
1. 驱动版本:确保达梦驱动版本与数据库版本匹配
2. SQL 语法:彻底检查项目中的所有 SQL 语句
3. 存储过程:如有存储过程需要重写
4. 索引和约束:检查索引和约束语法的兼容性
5. 性能优化:达梦的优化器与 MySQL 不同,可能需要调整查询 通过以上步骤,可以顺利完成从 MySQL 到达梦数据库的适配工作。

老麻




