MySQL到PostgreSQL修改总结.md 4.0 KB

MySQL到PostgreSQL的Mapper文件修改总结

修改的文件列表

  1. SysDeptMapper.xml
  2. SysDictDataMapper.xml
  3. SysDictTypeMapper.xml
  4. SysMenuMapper.xml
  5. SysRoleMapper.xml
  6. SysUserMapper.xml
  7. SysConfigMapper.xml
  8. SysLogininforMapper.xml
  9. SysOperLogMapper.xml
  10. SysNoticeMapper.xml

无需修改的文件列表

  1. SysRoleDeptMapper.xml
  2. SysRoleMenuMapper.xml
  3. SysUserRoleMapper.xml

主要修改内容

1. 字符串连接函数

  • MySQL语法: concat('%', #{param}, '%')
  • PostgreSQL语法: '%' || #{param} || '%'

2. 日期格式化函数

  • MySQL语法: date_format(column,'%Y%m%d')
  • PostgreSQL语法: to_char(column,'YYYYMMDD')

3. 当前时间函数

  • MySQL语法: sysdate()
  • PostgreSQL语法: now()

4. find_in_set函数替换

  • MySQL语法: find_in_set(#{id}, ancestors)
  • PostgreSQL语法: ancestors LIKE '%' || #{id} || ',' OR ancestors = #{id} OR ancestors LIKE '%' || #{id}

5. 限制结果集语法

  • MySQL语法: limit 1
  • PostgreSQL语法: FETCH FIRST 1 ROW ONLY

具体修改示例

SysDeptMapper.xml

  • 修改了selectDeptList中的concat函数
  • 修改了selectChildrenDeptById和selectNormalChildrenDeptById中的find_in_set函数
  • 修改了insertDept和updateDept中的sysdate()函数
  • 修改了限制结果集语法:limit 1 改为 FETCH FIRST 1 ROW ONLY

SysDictDataMapper.xml

  • 修改了selectDictDataList中的concat函数
  • 修改了updateDictData和insertDictData中的sysdate()函数

SysDictTypeMapper.xml

  • 修改了selectDictTypeList中的concat函数
  • 修改了日期格式化函数date_format为to_char
  • 修改了限制结果集语法:limit 1 改为 FETCH FIRST 1 ROW ONLY

SysMenuMapper.xml

  • 修改了selectMenuList和selectMenuListByUserId中的concat函数
  • 修改了限制结果集语法:limit 1 改为 FETCH FIRST 1 ROW ONLY

SysRoleMapper.xml

  • 修改了selectRoleList中的concat函数
  • 修改了日期格式化函数date_format为to_char
  • 修改了限制结果集语法:limit 1 改为 FETCH FIRST 1 ROW ONLY

SysUserMapper.xml

  • 修改了selectUserList、selectAllocatedList和selectUnallocatedList中的concat函数
  • 修改了日期格式化函数date_format为to_char
  • 修改了find_in_set函数为PostgreSQL兼容的LIKE条件组合
  • 修改了限制结果集语法:limit 1 改为 FETCH FIRST 1 ROW ONLY

SysConfigMapper.xml

  • 修改了selectConfigList中的concat函数
  • 修改了日期格式化函数date_format为to_char
  • 修改了insertConfig和updateConfig中的sysdate()函数
  • 修改了限制结果集语法:limit 1 改为 FETCH FIRST 1 ROW ONLY

SysLogininforMapper.xml

  • 修改了selectLogininforList中的concat函数

SysOperLogMapper.xml

  • 修改了selectOperLogList中的concat函数

SysNoticeMapper.xml

  • 修改了selectNoticeList中的concat函数

注意事项

  1. 所有修改都保持了原有的业务逻辑不变,只是将MySQL特有的语法替换为PostgreSQL兼容的语法
  2. 对于find_in_set函数的替换,使用了多个LIKE条件的组合,确保功能一致性
  3. 日期格式化函数的修改中,注意了PostgreSQL的日期格式字符串与MySQL的差异
  4. 所有修改后的文件应该可以在PostgreSQL数据库中正常运行
  5. SysRoleDeptMapper.xml、SysRoleMenuMapper.xml和SysUserRoleMapper.xml文件中没有需要修改的内容,因为它们只包含简单的CRUD操作,没有使用MySQL特有的函数
  6. 限制结果集语法的修改解决了用户编辑时的"登录账号已存在"错误,该错误是由于limit 1语法不兼容导致的

解决的问题

  1. 修复了用户编辑时的"登录账号已存在"错误,该错误是由于limit 1语法不兼容导致的
  2. 所有Mapper文件现在都使用PostgreSQL兼容的SQL语法
  3. 确保了所有查询、插入、更新操作在PostgreSQL环境下正常工作
  4. 已完成所有实际使用的Mapper文件中limit 1语法的修改,全部替换为FETCH FIRST 1 ROW ONLY语法