• 若依集成MybatisPlus


    目录

    一、依赖变更

    1. MybatisPlus依赖

    2. pagehelper依赖修改

    二、相关配置

    1. yml配置

    1.1 注释掉原Mybatis配置

    1.2 加入MybatisPlus的配置

    1.3 注释掉原MybatisConfig.class

    三、其他配置及功能实现

    1. 自动补全create_time等信息

    2. 实现MP分页

    3. 实现MybatisPlus代码生成

    3.1 方法一:使用MP自带的代码生成方法

    3.2 方法二:修改若依框架的代码生成部分以实现MP代码生成

    一、依赖变更

    1. MybatisPlus依赖(向ruoyi-common中导入mybatisplus的两个依赖)

    1. <dependency>
    2. <groupId>com.baomidou</groupId>
    3. <artifactId>mybatis-plus-boot-starter</artifactId>
    4. <version>3.5.2</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.baomidou</groupId>
    8. <artifactId>mybatis-plus-extension</artifactId>
    9. <version>3.5.2</version>
    10. <scope>compile</scope>
    11. </dependency>

    建议使用3.5.1及以上版本,3.4.x版分页有问题

    2. pagehelper依赖修改

    pagehelper依赖中不引用Mybatis相关依赖(MP依赖中自带Mybatis依赖),这样pagehelper分页依然可用

    1. <dependency>
    2. <groupId>com.github.pagehelper</groupId>
    3. <artifactId>pagehelper-spring-boot-starter</artifactId>
    4. <exclusions>
    5. <exclusion>
    6. <artifactId>mybatis-spring</artifactId>
    7. <groupId>org.mybatis</groupId>
    8. </exclusion>
    9. <exclusion>
    10. <artifactId>mybatis</artifactId>
    11. <groupId>org.mybatis</groupId>
    12. </exclusion>
    13. </exclusions>
    14. </dependency>

    二、相关配置

    1. yml配置

    1.1 注释掉原Mybatis配置
    1. # MyBatis配置
    2. #mybatis:
    3. # # 搜索指定包别名
    4. # typeAliasesPackage: com.bsd.**.domain
    5. # # 配置mapper的扫描,找到所有的mapper.xml映射文件
    6. # mapperLocations: classpath*:mapper/**/*Mapper.xml
    7. # # 加载全局的配置文件
    8. # configLocation: classpath:mybatis/mybatis-config.xml
    1.2 加入MybatisPlus的配置
    1. mybatis-plus:
    2. # Mapper.xml 文件位置 Maven 多模块项目的扫描路径需以 classpath*: 开头
    3. mapper-locations: classpath*:mapper/**/*Mapper.xml
    4. # #MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名 实体扫描,多个package用逗号或者分号分隔
    5. type-aliases-package: com.bsd.**.domain
    6. # config-location: classpath:mybatis/mybatis-config.xml
    7. # #通过父类(或实现接口)的方式来限定扫描实体
    8. # typeAliasesSuperType: com.vanhr.user.dao.entity.baseEntity
    9. # #枚举类 扫描路径 如果配置了该属性,会将路径下的枚举类进行注入,让实体类字段能够简单快捷的使用枚举属性
    10. # typeEnumsPackage: com.vanhr.user.dao.enums
    11. # 启动时是否检查 MyBatis XML 文件的存在,默认不检查 仅限spring boot 使用
    12. checkConfigLocation : true
    13. # #通过该属性可指定 MyBatis 的执行器,MyBatis 的执行器总共有三种:
    14. # # ExecutorType.SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句(PreparedStatement)
    15. # # ExecutorType.REUSE:该执行器类型会复用预处理语句(PreparedStatement)
    1.3 注释掉原MybatisConfig.class

    位置:com/bsd/framework/config/MyBatisConfig.java

    建议先别删除,若出现问题还可以退回去使用Mybatis

    此时MybatisPlus已经可以正常使用了,下面再记录一下其他常用配置


    添加MybatisPlusConfig

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

    3. 实现MybatisPlus代码生成

    修改若依框架的代码生成部分以实现MP代码生成

    因为若依的代码生成是使用velocity确定模版,再根据模版来生成代码,所以只要将MP相关代码部分(主要是一些注解和继承接口)添加到velocity模版即可。

    Velocity语法教学:Java Velocity模板引擎详解

    下面将修改好的vm文件贴出(包括domain、mapper、service、serviceImpl):

    domain.java.vm

    1. package ${packageName}.domain;
    2. #foreach ($import in $importList)
    3. import ${import};
    4. #end
    5. import com.bsd.common.annotation.Excel;
    6. import lombok.Data;
    7. import com.baomidou.mybatisplus.annotation.IdType;
    8. import com.baomidou.mybatisplus.annotation.TableName;
    9. import com.baomidou.mybatisplus.annotation.TableId;
    10. #if($table.crud || $table.sub)
    11. import com.bsd.common.core.domain.BaseEntity;
    12. #elseif($table.tree)
    13. import com.bsd.common.core.domain.TreeEntity;
    14. #end

    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. */

    service.java.vm

    1. package ${packageName}.service;
    2. import java.util.List;
    3. import com.baomidou.mybatisplus.extension.service.IService;
    4. import ${packageName}.domain.${ClassName};
    5. /**
    6. * ${functionName}Service接口
    7. *
    8. * @author ${author}
    9. * @date ${datetime}
    10. */
    11. public interface I${ClassName}Service extends IService<${ClassName}>
    12. {
    13. /**

    serviceImpl.java.vm

    1. package ${packageName}.service.impl;
    2. import java.util.List;
    3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    4. #foreach ($column in $columns)
    5. #if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
    6. import com.bsd.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.bsd.common.utils.StringUtils;

    有关MybatisPlus的其他问题,或者上面未说明的问题,均可查看MybatisPlus官网指南:简介 | MyBatis-Plus

  • 相关阅读:
    nginx 报错[emerg]: unknown directive “锘? in E:\nginx-1.18.0/conf/nginx.conf:3
    Kotlin Coroutines包下的select函数简介
    Python-time.time() 和 time.perf_counter()
    【UV打印机】波形开发-矢量波形工具(五)
    Java Keyword
    元宇宙中的情绪与情感探索在军事上的应用
    [单片机框架][bsp层][N32G4FR][bsp_pwm] pwm配置和使用
    css3 布局、flex布局、grid布局的常用属性(笔记)
    VSCode编写OpenCV
    STM32 cubeMX HAL-----PWM—改变频率
  • 原文地址:https://blog.csdn.net/weixin_42023748/article/details/133883111