网络技术分享
个人经验记录

spring boot环境下,mysql适配达梦数据库教程步骤详细说明

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 到达梦数据库的适配工作。

赞(1) 打赏
未经允许不得转载:老麻 » spring boot环境下,mysql适配达梦数据库教程步骤详细说明

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册