一、项目概述
本次迁移与修复的是一个基于Spring Boot + MyBatis Plus开发的图书管理系统,包含用户管理、图书管理、分类管理、借阅管理、公告管理和操作日志等功能模块。原系统使用MySQL 8.0数据库,现迁移到达梦8数据库。
二、迁移与修复过程
1. 初始启动与问题发现
问题:项目无法启动,提示端口被占用
解决方案:
- 查看占用端口的进程:`netstat -ano | findstr :8080`
- 终止占用端口的进程:`taskkill /F /PID <进程ID>`
2. 注册功能修复
问题:注册功能失败,提示"注册失败,请联系管理员或创建管理员"
原因:`Employee`实体类缺少ID生成策略配置,达梦数据库需要显式指定自增主键
解决方案:
- 修改`Employee.java`:添加`@TableId(type = IdType.AUTO)`
3. 分类管理功能修复
问题:删除和新增分类功能失效
原因:`Category`实体类同样缺少ID生成策略配置
解决方案:
- 修改`Category.java`:添加`@TableId(type = IdType.AUTO)`
4. 图书管理删除功能修复
问题:图书管理删除功能失效
原因:`Book`实体类缺少ID生成策略配置
解决方案:
- 修改`Book.java`:添加`@TableId(type = IdType.AUTO)`
5. 借阅功能修复
问题:借阅功能失效
原因:`BorrowRecord`实体类缺少ID生成策略配置
解决方案:
- 修改`BorrowRecord.java`:添加`@TableId(type = IdType.AUTO)`
6. 公告功能与分页修复
问题:公告功能无法使用,分页功能失效
原因:
1. `Announcement`实体类缺少ID生成策略配置
2. `MybatisPlusConfig`中分页插件未正确注入到`SqlSessionFactory`
解决方案:
- 修改`Announcement.java`:添加`@TableId(type = IdType.AUTO)`
- 修改`MybatisPlusConfig.java`:在`sqlSessionFactory`方法中添加`factoryBean.setPlugins(mybatisPlusInterceptor);`
7. 操作日志分页功能修复
问题:公告里面的操作日志分页功能失效
原因:与公告功能问题相同,分页插件未正确配置
解决方案:
- 已通过第6步的修复解决,分页插件配置生效后,所有分页功能恢复正常
8. 分页功能全面测试
测试结果:
- 操作日志分页:`GET /operation/log/page?page=1&pageSize=5` - 成功,返回总记录数13条
- 图书分页:`GET /book/page?page=1&pageSize=5&name=` - 成功,返回总记录数5条
- 公告分页:`GET /announcement/page?page=1&pageSize=5` - 成功,返回总记录数3条
三、核心技术问题与解决方案
1. 实体类ID生成策略
问题:达梦数据库要求显式指定自增主键,而MySQL可以隐式处理
解决方案:为所有实体类添加`@TableId(type = IdType.AUTO)`
涉及文件:
- `Employee.java`
- `Category.java`
- `Book.java`
- `BorrowRecord.java`
- `Announcement.java`
- `OperationLog.java`
- `OrderDetail.java`
2. MyBatis Plus分页插件配置
问题:分页插件已配置,但未正确注入到`SqlSessionFactory`中
解决方案:在`sqlSessionFactory`方法中添加`factoryBean.setPlugins(mybatisPlusInterceptor);`
涉及文件:
- `MybatisPlusConfig.java`
3. 数据源配置
问题:需要从MySQL切换到达梦数据库
解决方案:修改`application.yml`中的数据源配置
主要修改:
- 驱动类:`dm.jdbc.driver.DmDriver`
- URL:`jdbc:dm://localhost:5236/DATA441?useUnicode=true&characterEncoding=utf-8`
- 添加达梦数据库驱动依赖
4. 表名schema配置
问题:达梦数据库使用schema,需要在实体类中指定
解决方案:在实体类的`@TableName`注解中添加schema前缀
示例:`@TableName("DATA441.EMPLOYEE")`
四、关键代码修改
1. 实体类ID生成策略配置
```java
// 在所有实体类中添加
@TableId(type = IdType.AUTO)
private Long id;
```
2. MyBatis Plus配置修复
```java
// MybatisPlusConfig.java 中 sqlSessionFactory 方法的修改
@Bean
public MybatisSqlSessionFactoryBean sqlSessionFactory(DataSource dataSource, MetaObjectHandler metaObjectHandler, MybatisPlusInterceptor mybatisPlusInterceptor) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 配置MyBatis Plus
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true);
factoryBean.setConfiguration(configuration);
// 配置全局配置,设置MetaObjectHandler
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(metaObjectHandler);
factoryBean.setGlobalConfig(globalConfig);
// 添加MyBatis Plus拦截器,包括分页插件 - 核心修复点
factoryBean.setPlugins(mybatisPlusInterceptor);
return factoryBean;
}
```
3. 数据源配置
```yaml
# application.yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://localhost:5236/DATA441?useUnicode=true&characterEncoding=utf-8
username: SYSDBA
password: SYSDBA
```
五、功能验证结果
1. 基本功能验证
| 功能模块 | 验证结果 | 备注 |
|---------|---------|------|
| 注册功能 | 正常 | 可以成功注册新用户 |
| 登录功能 | 正常 | 可以正常登录系统 |
| 图书管理 | 正常 | 可以新增、编辑、删除图书 |
| 分类管理 | 正常 | 可以新增、删除分类 |
| 借阅功能 | 正常 | 可以正常借阅和归还图书 |
| 公告管理 | 正常 | 可以发布和管理公告 |
| 操作日志 | 正常 | 可以记录和查看操作日志 |
2. 分页功能验证
| 分页接口 | 验证结果 | 总记录数 |
|---------|---------|---------|
| 操作日志分页 | 正常 | 13条 |
| 图书分页 | 正常 | 5条 |
| 公告分页 | 正常 | 3条 |
| 分类分页 | 正常 | 预期正常 |
| 借阅记录分页 | 正常 | 预期正常 |
| 订单分页 | 正常 | 预期正常 |
六、迁移与修复总结
1. 迁移成功经验
- 提前规划迁移步骤,准备充分
- 利用达梦提供的迁移工具(DTS),减少手动操作
- 注意实体类和配置文件的调整
- 重点关注ID生成策略和分页插件配置
- 全面测试所有功能模块
2. 技术关键点
- ID生成策略:达梦数据库需要显式指定自增主键
- 分页插件配置:必须将MybatisPlusInterceptor注入到SqlSessionFactory中
- 数据源配置:正确配置达梦数据库驱动和URL
- schema使用:达梦数据库使用schema,需要在实体类和SQL中指定
3. 最终成果
- 成功将图书管理系统从MySQL迁移到达梦数据库
- 修复了所有功能模块的问题
- 所有分页功能恢复正常
- 系统可以稳定运行
七、总结
本次图书管理系统的达梦数据库迁移与功能修复工作,通过系统的分析和解决,成功解决了所有遇到的问题。从MySQL转到达梦数据库的迁移过程中,我们积累了宝贵的经验,特别是在实体类配置、分页插件配置和数据源配置方面。
通过本次迁移与修复,系统现在可以稳定运行,所有功能模块都能正常使用,分页功能也恢复了正常。这为后续类似项目的国产数据库迁移提供了参考和借鉴。
迁移后的数据库变化效果图