当前位置: 首页 > news >正文

简易图书系统MySQL数据库转达梦数据库

一、项目概述

本次迁移与修复的是一个基于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转到达梦数据库的迁移过程中,我们积累了宝贵的经验,特别是在实体类配置、分页插件配置和数据源配置方面。

通过本次迁移与修复,系统现在可以稳定运行,所有功能模块都能正常使用,分页功能也恢复了正常。这为后续类似项目的国产数据库迁移提供了参考和借鉴。

迁移后的数据库变化效果图

http://www.cnnetsun.cn/news/2644.html

相关文章:

  • 需求如何变成应用系统中的功能(之一)--银保监处罚案例查询系统
  • AI职场简历优化建议工具,核心功能,用户上传简历文字,程序分析简历中的亮点和不足,给出优化建议,如关键词补充,排版调整。
  • 老年书法绘画作品展示平台,核心功能,上传书法,绘画作品,设置作品介绍,支持点赞,评论,分享,举办线上作品展。应用场景,中老年人展示自己的才艺,互相交流学习,获得成就感。
  • C与C++核心区别深度解析笔记
  • 【期末复习01】--算法题ProgramDesign
  • 价值流与流程的区别:别让“伪敏捷“毁了你的运维体系
  • 服务价值链管理:为什么90%的运维团队都在“瞎忙“?
  • 服务价值体系落地后为何“雷声大雨点小“?深度剖析实施效果不佳的根本原因
  • 服务请求管理的双重挑战:标准化流程与个性化需求如何共存?
  • 什么是AI Agent ? AI Agent:赋予机器“生命“的三大核心能力
  • 基于Python的在线考试系统【2026最新】
  • 基于Python的高校后勤报修系统【2026最新】
  • 向海而生:未来港口海岛低空经济的系统架构与游戏规则
  • Linux系统多线程上下文切换(context switch)的 CPU 时钟耗时
  • 港科喜讯|香港科大校友企业“遇见小面“成功在港交所挂牌上市
  • taro学习路线
  • AI治堵,畅行三秦|SaaS信控嘹咋咧,一路畅的很!
  • 智能仓储项目投标/销售实战⑩:失败与复盘——如何优雅地“陪跑“并赢得未来?
  • 智能仓储进化史㉘ | 从“无人化“到“少人化“:智能化的边界在哪里?
  • 从大海捞针到一键下单:电子元器件采购背后的系统支撑
  • MCP:让 AI 工具互联互通的“普通话“
  • redis热点key拆分和读多副本
  • 线程池监控的五大指标
  • 1765360170889
  • 【网络安全】内网渗透基础知识超详细指南:从概念到核心原理,黑客入门必学干货全解析
  • 实战为王!2025精选十五个网络安全靶场(免费/开源+内网/Web/CTF全覆盖)
  • 0 基础转行网络安全:3 个月入门 + 接单变现,我从行政转成安全运维的真实经历
  • 大模型学习基础(四) Transformer架构 下
  • 零拷贝的原理
  • 祝贺东航首飞全球最长单程航线!通义千问和 AI 网关助力推出首个行程规划 Agent