飞道的博客

mybatis-plus的插件

422人阅读  评论(0)

一.mybatis的插件机制

1.介绍

2.配置步骤

2.1.首先写一个拦截器的类


  
  1. import org. apache. ibatis. executor. Executor;
  2. import org. apache. ibatis. mapping. MappedStatement;
  3. import org. apache. ibatis. plugin.*;
  4. import java. util. Properties;
  5. @Intercepts({
  6. @Signature(
  7. type = Executor. class, //表示拦截执行器的方法
  8. method = "update", //表示拦截执行器中的update方法
  9. args = { MappedStatement. class, Object. class}
  10. )
  11. })
  12. public class MyIntercepter implements Interceptor {
  13. @Override
  14. public Object intercept( Invocation invocation) throws Throwable {
  15. //拦截方法,具体业务逻辑编写的位置
  16. return invocation. proceed();
  17. }
  18. @Override
  19. public Object plugin( Object target) {
  20. //创建target对象的代理对象,目的是将当前的拦截器加入到该对象中,这个方法会被执行4次:因为有4中拦截的情况
  21. return Plugin. wrap(target, this);
  22. }
  23. @Override
  24. public void setProperties( Properties properties) {
  25. //属性设置
  26. }
  27. }

 2.2.在配置类中注入拦截器


  
  1. @Configuration
  2. @MapperScan( "com.cd.mp.mapper")
  3. public class MybatisPlusConfig {
  4. @Bean //设置分页插件
  5. public PaginationInterceptor paginationInterceptor( ){
  6. return new PaginationInterceptor();
  7. }
  8. @Bean
  9. public MyIntercepter myIntercepter( ){
  10. return new MyIntercepter();
  11. }
  12. }

二.执行分析插件

三.性能分析插件

四.乐观锁插件

2.插件配置

3.实体类中配置

4.数据库表也要version字段

5.测试

插件会自动给version加一 

总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。

缺点:

五.mybatis-plus的自动填充功能

1.首先在实体类中用@TableField注解file来设置什么时候自动填充

2.继承MetaObject

 六.Mybatis-Plus的逻辑删除

 

 1.数据库中的表需要一个对应的deleted字段

2.实体类

3.springBoot的配置文件

 7.通用枚举

1.首先表要有对应的字段

后端接收前端传来的String类型参数需要用枚举来接收的话,就需要定义一个自定义转换器


  
  1. import com. dingli. framework. eunm. MarryEumn;
  2. import org. springframework. context. annotation. Configuration;
  3. import org. springframework. core. convert. converter. Converter;
  4. import org. springframework. format. FormatterRegistry;
  5. import org. springframework. web. servlet. config. annotation. WebMvcConfigurer;
  6. @Configuration
  7. public class WebConfig implements WebMvcConfigurer {
  8. @Override
  9. public void addFormatters( FormatterRegistry registry) {
  10. registry. addConverter( new Converter< String, MarryEumn>() {
  11. @Override
  12. public MarryEumn convert( String s) {
  13. MarryEumn marryEumn = null;
  14. if (s. equals( "未婚")){
  15. marryEumn = MarryEumn. NOMARRY;
  16. }
  17. if (s. equals( "订婚")){
  18. marryEumn = MarryEumn. RESERVEMARRY;
  19. }
  20. if (s. equals( "已婚")){
  21. marryEumn = MarryEumn. MARRY;
  22. }
  23. if (s. equals( "离婚")){
  24. marryEumn = MarryEumn. DIVORCE;
  25. }
  26. return marryEumn;
  27. }
  28. });
  29. }
  30. }

2.定义枚举:继承IEnum接口

@EnumValue:指定数据库中存的值

@JsonValue:指定返回给前端的值


  
  1. import com.baomidou.mybatisplus. annotation.EnumValue;
  2. import com.baomidou.mybatisplus.core.enums.IEnum;
  3. import com.fasterxml.jackson. annotation.JsonValue;
  4. public enum MarryEumn implements IEnum<Integer> {
  5. NOMARRY( 0, "未婚"),
  6. RESERVEMARRY( 1, "订婚"),
  7. MARRY( 2, "已婚"),
  8. DIVORCE( 3, "离婚");
  9. @EnumValue
  10. private int value;
  11. @JsonValue
  12. private String desc;
  13. MarryEumn(int value, String desc) {
  14. this.value = value;
  15. this.desc = desc;
  16. }
  17. @Override
  18. public Integer getValue() {
  19. return this.value;
  20. }
  21. @Override
  22. public String toString() {
  23. return this.desc;
  24. }
  25. }

 3.springboot中配置

default-enum-type-handler:这个也很重要,这里不配的话,如果是自己写xml文件,在sql中也会写

#{marriage,typeHandler=org.apache.ibatis.type.EnumTypeHandler}

  
  1. mybatis-plus:
  2. global- config:
  3. db- config:
  4. id- type: auto
  5. configuration:
  6. log-impl: org.apache.ibatis.logging. stdout.StdOutImpl
  7. default-enum- type-handler: org.apache.ibatis. type.EnumOrdinalTypeHandler
  8. type-enums- package: com.dingli.framework.eunm
  9. mapper-locations: classpath*:mappers/*Mapper.xml

4.修改实体

8.MP的代码生成器

9.MybatisX快速开发插件


转载:https://blog.csdn.net/weixin_54401017/article/details/125800206
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场