若依 MyBatis改为MyBatis-Plus

主要内容:升级成mybatis-plus,代码生成也是mybatis-plus版本

跟着我一步一步来,就可完成升级!

检查:启动程序,先保证若依能启动

第一步:添加依赖

这里需要在两个地方添加,一个是最外面的父工程的pom.xml,一个是ruoyi-common的pom.xml。

最外面的父工程的pom.xml:

1.添加版本信息

cf7d1f409863410b902861f49b78dfba.png

  1. 代码:
  2. <!-- mybatis-plus 版本-->
  3. <mybatis-pluc.version>3.4.2</mybatis-pluc.version>

2.添加mybatis-plus依赖

6096c4bd847f441e9293a9b0e2b4f134.png

代码:

  1. <!-- mybatis-plus 增强CRUD -->
  2. <dependency>
  3. <groupId>com.baomidou</groupId>
  4. <artifactId>mybatis-plus-boot-starter</artifactId>
  5. <version>3.4.2</version>
  6. </dependency>

ruoyi-common的pom.xml:

1.直接继承父工程的依赖

06385196265f42aebe2f8ca53dfacc3c.png

第一步验证:

admin的包中的application.yml文件有mybatis-plus的提示,说明依赖弄好啦!

3f05e091aade40b8ad341cb9af46fffe.png

第二步:修改application.yml文件

1.删除旧的mybatis配置

39b279cf0aa84700905fbcb4aadc6e2b.png

2.写入新配置

1ee70bff179a4495be80b296764e9d6b.png

代码:

  1. # MyBatis Plus配置
  2. mybatis-plus:
  3. # 搜索指定包别名 根据自己的项目来
  4. typeAliasesPackage: com.rchuing.sis.**.domain
  5. # 配置mapper的扫描,找到所有的mapper.xml映射文件
  6. mapperLocations: classpath*:mapper/**/*Mapper.xml
  7. # 加载全局的配置文件
  8. configLocation: classpath:mybatis/mybatis-config.xml
  9. global-config:
  10. enable-sql-runner: true
  11. db-config:
  12. id-type: auto

第三步:重写mybatis配置文件

1.在framework中,找到MybatisConfig文件,然后删除。

07a1cce820254e0cad11d459eca3e136.png

2.在刚删除的文件夹下,新建一个MybatisPlus的java文件

复制已下内容到java文件中:

  1. /**
  2. * Mybatis Plus 配置
  3. *
  4. * @author ruoyi
  5. */
  6. @EnableTransactionManagement(proxyTargetClass = true)
  7. @Configuration
  8. public class MybatisPlusConfig
  9. {
  10. @Bean
  11. public MybatisPlusInterceptor mybatisPlusInterceptor()
  12. {
  13. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  14. // 分页插件
  15. interceptor.addInnerInterceptor(paginationInnerInterceptor());
  16. // 乐观锁插件
  17. interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
  18. // 阻断插件
  19. interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
  20. return interceptor;
  21. }
  22. /**
  23. * 分页插件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html
  24. */
  25. public PaginationInnerInterceptor paginationInnerInterceptor()
  26. {
  27. PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
  28. // 设置数据库类型为mysql
  29. paginationInnerInterceptor.setDbType(DbType.MYSQL);
  30. // 设置最大单页限制数量,默认 500 条,-1 不受限制
  31. paginationInnerInterceptor.setMaxLimit(-1L);
  32. return paginationInnerInterceptor;
  33. }
  34. /**
  35. * 乐观锁插件 https://baomidou.com/guide/interceptor-optimistic-locker.html
  36. */
  37. public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor()
  38. {
  39. return new OptimisticLockerInnerInterceptor();
  40. }
  41. /**
  42. * 如果是对全表的删除或更新操作,就会终止该操作 https://baomidou.com/guide/interceptor-block-attack.html
  43. */
  44. public BlockAttackInnerInterceptor blockAttackInnerInterceptor()
  45. {
  46. return new BlockAttackInnerInterceptor();
  47. }
  48. }

如图:

6013c190dabd48cb94edb12070eaa507.png

到这里Mybatis-plus就升级完成了。但代码生成里面还是以前mybatis的,这里也需要升级一下,方便代码生成。

第四步:把代码生成修改为mybatis-plus版本

1.在generator找到vm中的java文件夹

295b16675cc446e9a73bf58dd0bfd2a3.png

2.修改里面内容:这里直接上代码了,找到对应的直接复制粘贴就行

2.1:domain.java.vm

  1. package ${packageName}.domain;
  2. #foreach ($import in $importList)
  3. import ${import};
  4. #end
  5. import com.baomidou.mybatisplus.annotation.IdType;
  6. import com.baomidou.mybatisplus.annotation.TableId;
  7. import com.baomidou.mybatisplus.annotation.TableName;
  8. import org.apache.commons.lang3.builder.ToStringBuilder;
  9. import org.apache.commons.lang3.builder.ToStringStyle;
  10. import com.rchuing.sis.common.annotation.Excel;
  11. #if($table.crud || $table.sub)
  12. import com.rchuing.sis.common.core.domain.BaseEntity;
  13. #elseif($table.tree)
  14. import com.fenghuang.common.core.domain.TreeEntity;
  15. #end
  16. /**
  17. * ${functionName}对象 ${tableName}
  18. *
  19. * @author ${author}
  20. * @date ${datetime}
  21. */
  22. #if($table.crud || $table.sub)
  23. #set($Entity="BaseEntity")
  24. #elseif($table.tree)
  25. #set($Entity="TreeEntity")
  26. #end
  27. @TableName(resultMap = "${packageName}.mapper.${ClassName}Mapper.${ClassName}Result")
  28. public class ${ClassName} extends ${Entity}
  29. {
  30. private static final long serialVersionUID = 1L;
  31. #foreach ($column in $columns)
  32. #if(!$table.isSuperColumn($column.javaField))
  33. /** $column.columnComment */
  34. #if($column.list)
  35. #set($parentheseIndex=$column.columnComment.indexOf("("))
  36. #if($parentheseIndex != -1)
  37. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  38. #else
  39. #set($comment=$column.columnComment)
  40. #end
  41. #if($parentheseIndex != -1)
  42. @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
  43. #elseif($column.javaType == 'Date')
  44. @JsonFormat(pattern = "yyyy-MM-dd")
  45. @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
  46. #else
  47. @Excel(name = "${comment}")
  48. #end
  49. #end
  50. #if($column.isPk == 1)
  51. @TableId(value = "$column.columnName",type = IdType.AUTO)
  52. #end
  53. private $column.javaType $column.javaField;
  54. #end
  55. #end
  56. #if($table.sub)
  57. /** $table.subTable.functionName信息 */
  58. private List<${subClassName}> ${subclassName}List;
  59. #end
  60. #foreach ($column in $columns)
  61. #if(!$table.isSuperColumn($column.javaField))
  62. #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
  63. #set($AttrName=$column.javaField)
  64. #else
  65. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  66. #end
  67. public void set${AttrName}($column.javaType $column.javaField)
  68. {
  69. this.$column.javaField = $column.javaField;
  70. }
  71. public $column.javaType get${AttrName}()
  72. {
  73. return $column.javaField;
  74. }
  75. #end
  76. #end
  77. #if($table.sub)
  78. public List<${subClassName}> get${subClassName}List()
  79. {
  80. return ${subclassName}List;
  81. }
  82. public void set${subClassName}List(List<${subClassName}> ${subclassName}List)
  83. {
  84. this.${subclassName}List = ${subclassName}List;
  85. }
  86. #end
  87. @Override
  88. public String toString() {
  89. return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
  90. #foreach ($column in $columns)
  91. #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
  92. #set($AttrName=$column.javaField)
  93. #else
  94. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  95. #end
  96. .append("${column.javaField}", get${AttrName}())
  97. #end
  98. #if($table.sub)
  99. .append("${subclassName}List", get${subClassName}List())
  100. #end
  101. .toString();
  102. }
  103. }

2.2:mapper.java.vm

  1. package ${packageName}.mapper;
  2. import java.util.List;
  3. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4. import ${packageName}.domain.${ClassName};
  5. #if($table.sub)
  6. import ${packageName}.domain.${subClassName};
  7. #end
  8. /**
  9. * ${functionName}Mapper接口
  10. *
  11. * @author ${author}
  12. * @date ${datetime}
  13. */
  14. public interface ${ClassName}Mapper extends BaseMapper<${ClassName}> {
  15. /**
  16. * 查询${functionName}
  17. *
  18. * @param ${pkColumn.javaField} ${functionName}主键
  19. * @return ${functionName}
  20. */
  21. public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
  22. /**
  23. * 查询${functionName}列表
  24. *
  25. * @param ${className} ${functionName}
  26. * @return ${functionName}集合
  27. */
  28. public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
  29. /**
  30. * 新增${functionName}
  31. *
  32. * @param ${className} ${functionName}
  33. * @return 结果
  34. */
  35. public int insert${ClassName}(${ClassName} ${className});
  36. /**
  37. * 修改${functionName}
  38. *
  39. * @param ${className} ${functionName}
  40. * @return 结果
  41. */
  42. public int update${ClassName}(${ClassName} ${className});
  43. /**
  44. * 删除${functionName}
  45. *
  46. * @param ${pkColumn.javaField} ${functionName}主键
  47. * @return 结果
  48. */
  49. public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
  50. /**
  51. * 批量删除${functionName}
  52. *
  53. * @param ${pkColumn.javaField}s 需要删除的数据主键集合
  54. * @return 结果
  55. */
  56. public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
  57. #if($table.sub)
  58. /**
  59. * 批量删除${subTable.functionName}
  60. *
  61. * @param ${pkColumn.javaField}s 需要删除的数据主键集合
  62. * @return 结果
  63. */
  64. public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
  65. /**
  66. * 批量新增${subTable.functionName}
  67. *
  68. * @param ${subclassName}List ${subTable.functionName}列表
  69. * @return 结果
  70. */
  71. public int batch${subClassName}(List<${subClassName}> ${subclassName}List);
  72. /**
  73. * 通过${functionName}主键删除${subTable.functionName}信息
  74. *
  75. * @param ${pkColumn.javaField} ${functionName}ID
  76. * @return 结果
  77. */
  78. public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField});
  79. #end
  80. }

2.3:service.java.vm

  1. package ${packageName}.service;
  2. import java.util.List;
  3. import ${packageName}.domain.${ClassName};
  4. import com.baomidou.mybatisplus.extension.service.IService;
  5. /**
  6. * ${functionName}Service接口
  7. *
  8. * @author ${author}
  9. * @date ${datetime}
  10. */
  11. public interface I${ClassName}Service extends IService<${ClassName}> {
  12. /**
  13. * 查询${functionName}
  14. *
  15. * @param ${pkColumn.javaField} ${functionName}主键
  16. * @return ${functionName}
  17. */
  18. public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
  19. /**
  20. * 查询${functionName}列表
  21. *
  22. * @param ${className} ${functionName}
  23. * @return ${functionName}集合
  24. */
  25. public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
  26. /**
  27. * 新增${functionName}
  28. *
  29. * @param ${className} ${functionName}
  30. * @return 结果
  31. */
  32. public int insert${ClassName}(${ClassName} ${className});
  33. /**
  34. * 修改${functionName}
  35. *
  36. * @param ${className} ${functionName}
  37. * @return 结果
  38. */
  39. public int update${ClassName}(${ClassName} ${className});
  40. /**
  41. * 批量删除${functionName}
  42. *
  43. * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合
  44. * @return 结果
  45. */
  46. public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
  47. /**
  48. * 删除${functionName}信息
  49. *
  50. * @param ${pkColumn.javaField} ${functionName}主键
  51. * @return 结果
  52. */
  53. public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
  54. }

2.4:serviceimpl.java.vm

  1. package ${packageName}.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import java.util.List;
  4. #foreach ($column in $columns)
  5. #if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
  6. import com.rchuing.common.utils.DateUtils;
  7. #break
  8. #end
  9. #end
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. #if($table.sub)
  13. import java.util.ArrayList;
  14. import com.rchuing.common.utils.StringUtils;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import ${packageName}.domain.${subClassName};
  17. #end
  18. import ${packageName}.mapper.${ClassName}Mapper;
  19. import ${packageName}.domain.${ClassName};
  20. import ${packageName}.service.I${ClassName}Service;
  21. /**
  22. * ${functionName}Service业务层处理
  23. *
  24. * @author ${author}
  25. * @date ${datetime}
  26. */
  27. @Service
  28. public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service {
  29. @Autowired
  30. private ${ClassName}Mapper ${className}Mapper;
  31. /**
  32. * 查询${functionName}
  33. *
  34. * @param ${pkColumn.javaField} ${functionName}主键
  35. * @return ${functionName}
  36. */
  37. @Override
  38. public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
  39. return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
  40. }
  41. /**
  42. * 查询${functionName}列表
  43. *
  44. * @param ${className} ${functionName}
  45. * @return ${functionName}
  46. */
  47. @Override
  48. public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) {
  49. return ${className}Mapper.select${ClassName}List(${className});
  50. }
  51. /**
  52. * 新增${functionName}
  53. *
  54. * @param ${className} ${functionName}
  55. * @return 结果
  56. */
  57. #if($table.sub)
  58. @Transactional
  59. #end
  60. @Override
  61. public int insert${ClassName}(${ClassName} ${className}) {
  62. #foreach ($column in $columns)
  63. #if($column.javaField == 'createTime')
  64. ${className}.setCreateTime(DateUtils.getNowDate());
  65. #end
  66. #end
  67. #if($table.sub)
  68. int rows = ${className}Mapper.insert${ClassName}(${className});
  69. insert${subClassName}(${className});
  70. return rows;
  71. #else
  72. return ${className}Mapper.insert${ClassName}(${className});
  73. #end
  74. }
  75. /**
  76. * 修改${functionName}
  77. *
  78. * @param ${className} ${functionName}
  79. * @return 结果
  80. */
  81. #if($table.sub)
  82. @Transactional
  83. #end
  84. @Override
  85. public int update${ClassName}(${ClassName} ${className}) {
  86. #foreach ($column in $columns)
  87. #if($column.javaField == 'updateTime')
  88. ${className}.setUpdateTime(DateUtils.getNowDate());
  89. #end
  90. #end
  91. #if($table.sub)
  92. ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
  93. insert${subClassName}(${className});
  94. #end
  95. return ${className}Mapper.update${ClassName}(${className});
  96. }
  97. /**
  98. * 批量删除${functionName}
  99. *
  100. * @param ${pkColumn.javaField}s 需要删除的${functionName}主键
  101. * @return 结果
  102. */
  103. #if($table.sub)
  104. @Transactional
  105. #end
  106. @Override
  107. public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) {
  108. #if($table.sub)
  109. ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s);
  110. #end
  111. return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s);
  112. }
  113. /**
  114. * 删除${functionName}信息
  115. *
  116. * @param ${pkColumn.javaField} ${functionName}主键
  117. * @return 结果
  118. */
  119. #if($table.sub)
  120. @Transactional
  121. #end
  122. @Override
  123. public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
  124. #if($table.sub)
  125. ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
  126. #end
  127. return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
  128. }
  129. #if($table.sub)
  130. /**
  131. * 新增${subTable.functionName}信息
  132. *
  133. * @param ${className} ${functionName}对象
  134. */
  135. public void insert${subClassName}(${ClassName} ${className}) {
  136. List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
  137. ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
  138. if (StringUtils.isNotNull(${subclassName}List))
  139. {
  140. List<${subClassName}> list = new ArrayList<${subClassName}>();
  141. for (${subClassName} ${subclassName} : ${subclassName}List)
  142. {
  143. ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
  144. list.add(${subclassName});
  145. }
  146. if (list.size() > 0)
  147. {
  148. ${className}Mapper.batch${subClassName}(list);
  149. }
  150. }
  151. }
  152. #end
  153. }

2.5:sub-domain.java.vm

  1. package ${packageName}.domain;
  2. #foreach ($import in $subImportList)
  3. import ${import};
  4. #end
  5. import org.apache.commons.lang3.builder.ToStringBuilder;
  6. import org.apache.commons.lang3.builder.ToStringStyle;
  7. import com.rchuing.common.annotation.Excel;
  8. import com.rchuing.common.core.domain.BaseEntity;
  9. /**
  10. * ${subTable.functionName}对象 ${subTableName}
  11. *
  12. * @author ${author}
  13. * @date ${datetime}
  14. */
  15. public class ${subClassName} extends BaseEntity {
  16. private static final long serialVersionUID = 1L;
  17. #foreach ($column in $subTable.columns)
  18. #if(!$table.isSuperColumn($column.javaField))
  19. /** $column.columnComment */
  20. #if($column.list)
  21. #set($parentheseIndex=$column.columnComment.indexOf("("))
  22. #if($parentheseIndex != -1)
  23. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  24. #else
  25. #set($comment=$column.columnComment)
  26. #end
  27. #if($parentheseIndex != -1)
  28. @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
  29. #elseif($column.javaType == 'Date')
  30. @JsonFormat(pattern = "yyyy-MM-dd")
  31. @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
  32. #else
  33. @Excel(name = "${comment}")
  34. #end
  35. #end
  36. private $column.javaType $column.javaField;
  37. #end
  38. #end
  39. #foreach ($column in $subTable.columns)
  40. #if(!$table.isSuperColumn($column.javaField))
  41. #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
  42. #set($AttrName=$column.javaField)
  43. #else
  44. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  45. #end
  46. public void set${AttrName}($column.javaType $column.javaField) {
  47. this.$column.javaField = $column.javaField;
  48. }
  49. public $column.javaType get${AttrName}() {
  50. return $column.javaField;
  51. }
  52. #end
  53. #end
  54. @Override
  55. public String toString() {
  56. return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
  57. #foreach ($column in $subTable.columns)
  58. #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
  59. #set($AttrName=$column.javaField)
  60. #else
  61. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  62. #end
  63. .append("${column.javaField}", get${AttrName}())
  64. #end
  65. .toString();
  66. }
  67. }

到这里就升级完成。

下面进行测试:

1.

d8265481387044c4a9a94c8603ca474d.png

2.

4403f6778a784138a8e9df57893fce51.png

3.如果看到mybatis的东西,说明升级成功!

32742c36f25c4422afc86eb5c0007554.png

注意:

1.这里可能有些包的路径不对,把爆红的包删除,重新导入就可!

2.因为实际项目路径不同,这里**可能**需要手动修改!

73a4174b95af4494b0bbd3fdc87fc041.png

3.在BaseEntity类中

1a7da61b05c54e6e927ff908ebe9a880.png

发表评论

表情:
评论列表 (有 0 条评论,45人围观)

还没有评论,来说两句吧...

相关阅读