zoukankan      html  css  js  c++  java
  • MyBatis Plus 2.3 个人笔记-04-配置文件与插件使用

    • 接入 springboot application.yml配置

      1.mapper 扫描

    mybatis-plus:
      # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
      # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
      mapper-locations: classpath:/com/huarui/mybatisplus/mapper/*Mapper.xml
      #实体扫描,多个package用逗号或者分号分隔
      typeAliasesPackage: com.huarui.mybatisplus.entity
    

      

    @SpringBootApplication
    @MapperScan("com.huarui.mybatisplus.mapper")
    public class Application {
    
    	public static void main(String[] args) {
    		SpringApplication.run(Application.class, args);
    	}
    
    }
    

      

      2.自定义公共字段填充处理器

    当我们新增或修改时需要给某个字段 赋值默认值

      

    @TableName("tbl_user")
    public class User extends Model<User> {
    
        private static final long serialVersionUID = 1L;
    
        @TableId(value = "id", type = IdType.ID_WORKER)
        private Long id;
    
    
        /**
       * * 新增 修改时 字段自动填充 */ @TableField(fill = FieldFill.INSERT_UPDATE) private String name; }

      

    package com.huarui.mybatisplus.configuration;
    
    import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
    import org.apache.ibatis.reflection.MetaObject;
    
    /**
     * Created by lihui on 2019/2/17.
     * 自定义公共字段填充处理器
     */
    public class MyMetaObjectHandler extends MetaObjectHandler {
    
        /**
         * 插入操作 自动填充
         */
        @Override
        public void insertFill(MetaObject metaObject) {
            //获取到需要被填充的字段的值
            Object fieldValue = getFieldValByName("name", metaObject);
            if(fieldValue == null) {
                System.out.println("*******插入操作 满足填充条件*********");
                setFieldValByName("name", "youxiu326", metaObject);
            }
        }
    
        /**
         * 修改操作 自动填充
         */
        @Override
        public void updateFill(MetaObject metaObject) {
            Object fieldValue = getFieldValByName("name", metaObject);
            if(fieldValue == null) {
                System.out.println("*******修改操作 满足填充条件*********");
                setFieldValByName("name", "youxiu326", metaObject);
            }
        }
    }
    MyMetaObjectHandler.java
    mybatis-plus:
      # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
      # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
      mapper-locations: classpath:/com/huarui/mybatisplus/mapper/*Mapper.xml
      #实体扫描,多个package用逗号或者分号分隔
      typeAliasesPackage: com.huarui.mybatisplus.entity
      global-config:
        #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
        id-type: 2
        #自定义填充策略接口实现
        meta-object-handler: com.huarui.mybatisplus.configuration.MyMetaObjectHandler
    

      

      3.逻辑删除

    @TableName("tbl_user")
    public class User extends Model<User> {
    
        private static final long serialVersionUID = 1L;
    
        @TableId(value = "id", type = IdType.ID_WORKER)
        private Long id;
    
    
    
        @TableField("deleteFlag")
        @TableLogic //逻辑删除标志
        private Integer deleteFlag;
    
    }
    

      

    mybatis-plus:
      # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
      # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
      mapper-locations: classpath:/com/huarui/mybatisplus/mapper/*Mapper.xml
      #实体扫描,多个package用逗号或者分号分隔
      typeAliasesPackage: com.huarui.mybatisplus.entity
      global-config:
        #逻辑删除配置(下面3个配置)
        logic-delete-value: -1    #删除状态
        logic-not-delete-value: 1 #未删除状态
        sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
    

      

     4.分页插件 与 乐观锁插件使用

      

    @EnableTransactionManagement
    @Configuration
    @MapperScan("com.huarui.mybatisplus.mapper.*")
    public class MybatisPlusConfig {
    
        /**
         * 分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    
        /**
         * 乐观锁插件
         */
        @Bean
        public OptimisticLockerInterceptor optimisticLockerInterceptor() {
            return new OptimisticLockerInterceptor();
        }
    
    }
    

      

        分页插件配置即可使用

      乐观锁实现方式:

    • 取出记录时,获取当前version
    • 更新时,带上这个version
    • 执行更新时, set version = yourVersion+1 where version = yourVersion
    • 如果version不对,就更新失败
    @TableName("tbl_employee")
    public class Employee extends Model<Employee> {
    
        private static final long serialVersionUID = 1L;
    
        /*
    	 * @TableId:
    	 * 	 value: 指定表中的主键列的列名, 如果实体属性名与列名一致,可以省略不指定.
    	 *   type: 指定主键策略.  ID_WORKER 全局唯一ID,内容为空自动填充(默认配置)
    	 */
        @TableId(value = "id", type = IdType.ID_WORKER)
        private Long id;
    
    
        /**
         * 声明该属性不是数据库中字段
         */
        @TableField(exist = false)
        private String notExist;
    
        /**
         * 乐观锁版本号
         *  仅支持int,Integer,long,Long,Date,Timestamp
         */
        @Version
        private Integer version;
    
    }
    

      

      5.性能分析插件

    spring:
      profiles:
        #spring boot application.properties文件中引用maven profile节点的值
        active: dev #指定dev环境
    

      

    package com.huarui.mybatisplus.configuration;
    
    import com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor;
    import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
    import com.baomidou.mybatisplus.plugins.PerformanceInterceptor;
    import com.baomidou.mybatisplus.plugins.SqlExplainInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    /**
     * Created by lihui on 2019/2/17.
     */
    
    @EnableTransactionManagement
    @Configuration
    @MapperScan("com.huarui.mybatisplus.mapper.*")
    public class MybatisPlusConfig {
    
        /**
         * 分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    
        /**
         * 性能分析插件
         */
        @Bean
        @Profile({"dev","test"})// 设置 dev test 环境开启
        public PerformanceInterceptor performanceInterceptor () {
            PerformanceInterceptor p =  new PerformanceInterceptor ();
            p.setFormat(true);
            p.setMaxTime(200);
    //参数:maxTime SQL 执行最大时长,超过自动停止运行,有助于发现问题。
    //参数:format SQL SQL是否格式化,默认false。
            return p;
        }
    
        /**
         * 乐观锁插件
         */
        @Bean
        public OptimisticLockerInterceptor optimisticLockerInterceptor() {
            return new OptimisticLockerInterceptor();
        }
    
    }
    

      

  • 相关阅读:
    【C++ Primer Chapter 3 总结】Library vector & string Type
    【C++ Primer Chapter 4 总结】左值 & 右值
    【C++ Primer Chapter 6 总结】函数
    mysql添加索引
    注册plsql
    挑战答题小程序
    开源答题小程序
    答题如何防止作弊
    党史知识答题活动小程序复盘整理
    党史学习教育答题活动复盘
  • 原文地址:https://www.cnblogs.com/youxiu326/p/mybatisPlus-041.html
Copyright © 2011-2022 走看看