mybatis-plus使用时的一些总结

mybatis-plus相关

 

简单整合

- 加入pom依赖

maven:

        3.2.0        
        
            com.baomidou
            mybatis-plus-boot-starter
            ${mybatis-plus-boot.version}
        
 

gradule:

compile group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: '3.2.0'

- 配置文件(application.properties)

#数据源
spring.datasource.url=jdbc:mysql://127.0.0.1/dream_of_getting_rich?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456
​
#mybatis-plus,框架dao和业务dao分了包,所以分开扫描
mybatis-plus.mapper-locations=classpath*:com/mbh/**/*/dao/*.xml
#如果多个包可以分开扫
#mybatis-plus.mapper-locations[0]=classpath*:com/mbh/framework/*/dao/*.xml
#mybatis-plus.mapper-locations[1]=classpath:com/mbh/project/*/dao/*.xml
#mybatis-plus.type-aliases-package: com.mbh.project.*.entity
#打印日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#逻辑删除配置
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

功能支持

配置分页Bean

 
@Configuration
@MapperScan({"com.mbh.framework.*.dao","com.mbh.project.*.dao"})
public class MybatisPlusConfig {
    /** 分页插件*/
    @Bean
    public PaginationInterceptor paginationInterceptorGlo() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // paginationInterceptor.setLimit(你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制);
        //paginationInterceptor.setDialectType("mysql");
        page.setDialectType(DbType.MYSQL.getDb());// 设置数据库方言
        List sqlParserList = new ArrayList<>();
        // 攻击 SQL 阻断解析器、加入解析链
        sqlParserList.add(new BlockAttackSqlParser());
        page.setSqlParserList(sqlParserList);   
        return paginationInterceptor;
    }
}

 

 

自动插入支持

  • 主要用于处理:createTime、createUserId、updateTime、deleted等属性

  1. 重写处理组件

    public class MetaHandler extends MetaObjectHandler {
            @Override
        public void insertFill(MetaObject metaObject) {
            boolean creatTime=metaObject.hasSetter("createTime");
            boolean updateTime=metaObject.hasSetter("updateTime");
            if(creatTime  ){
                setFieldValByName("createTime", new Date(), metaObject);
            }
            if(updateTime){
                setFieldValByName("updateTime", new Date(), metaObject);
            }
        }
        @Override
        public void updateFill(MetaObject metaObject) {
            Object updatedTime=getFieldValByName("updatedTime",metaObject);
            if(updatedTime == null){
                setFieldValByName("updatedTime", new Date(), metaObject);
            }
        }
    }

     

  2. 配置

    @Configuration
    public class MybatisPlusConfig {
        @Bean
        public GlobalConfiguration globalConfig(){
            GlobalConfiguration globalConfig=new GlobalConfiguration();
            globalConfig.setMetaObjectHandler(new MetaHandler());
            return globalConfig;
        }
    }

     

逻辑删除

  1. 配置bean

        @Bean
        public ISqlInjector sqlInjector(){
            return  new LogicSqlInjector();
        }

     

  2. properties

    # 逻辑已删除值(默认为 1)
    mybatis-plus.global-config.db-config.logic-delete-value: 1
    # 逻辑未删除值(默认为 0)
    mybatis-plus.global-config.db-config.logic-not-delete-value: 0

     

  3. 使用

    @TableLogic
    private Integer deleted;

     

 

乐观锁插件

  1. 配置

    @Bean 
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
      return new OptimisticLockerInterceptor();
    }

     

  2. 使用注解 @Version注解实体字段

    @Version
    private Integer  version;

     

  • 支持的数据类型只有: int, Integer, long, Long, Date, Timestamp, LocalDateTime

  • 整数类型下 newVersion=oldVersion+1

  • newVersion 会回写到 entity 中

  • 仅支持 updateById(id)update(entity,wrapper) 方法

  • update(entity,wrapper)方法下, wrapper不能复用!

解决问题

- 时区问题

在配置文件spring.datasource.url后加:&serverTimezone=GMT

用法

手动事务

@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;

@Autowired
private TransactionDefinition transactionDefinition;

//手动开启事务
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
//手动提交事务
dataSourceTransactionManager.commit(transactionStatus);//提交
//手动回滚事务——(最好是放在catch 里面,防止程序异常而事务一直卡在哪里未提交)
dataSourceTransactionManager.rollback(transactionStatus);

 

引用静态字段_常量字段

引用静态常量字段:引用常量字段或枚举类型

  • 引用语法规则:${@[email protected]}

  • 由于是服务器内部的传值,不会有注入,所以用$取值

  • 如果是字符串记得这样写(加单引号):'${@全路径名@枚举值.get属性()}'

  • 引常量

    public final  class WmsConstant  {
            public static final String RST = "xxxx";
        }

     

  • 引枚举

    public final static class Port  {
            public static final Port RST = new Port(28);
            private Port() {
            }
            public Port(Integer value) {
                this.value = value;
            }
        }

     

 

你可能感兴趣的:(mybatis-plus使用,java,spring,boot,后端)