springBoot配置mybatisPlus详解

mp官网地址:https://baomidou.com

  1. 引入依赖 (可去官网引入最新依赖)
		<dependency>
	        <groupId>com.baomidougroupId>
	        <artifactId>mybatis-plus-boot-starterartifactId>
	        <version>3.4.1version>
    	dependency>
  1. 配置ymal(以下是基本配置 最常用的 如果还需要 去官网配置中找)
mybatis-plus:
    global-config:
      db-config:
         logic-not-delete-value: 0 # 0代表未删除
         logic-delete-value: 1 # 1代表已删除
         table-prefix: wt_ # wt_代表按照实体类关联去查 总是会以wt_实体类名称为表名去查 
    typeEnumsPackage: com.wotao.platform.typeEnums #枚举转换的包名 关于枚举转换可看另一篇博客
    mapperLocations: classpath:mapper/*.xml # xml文件位置
  1. 写配置类(如果不需要可忽略 其实没有太大必要)
@Configuration
public class MpConfig {
    public static ThreadLocal<String> myTableName = new ThreadLocal<>();

    /*@Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
    //TODO 只在测试环境和开发环境开启 打印sql执行时间
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor pi = new PerformanceInterceptor();
        return pi;
    }*/

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor pi = new PaginationInterceptor();
        //租户sql解析器
        /*List iSqlParsers = new ArrayList<>();*/
        /*TenantSqlParser tenantSqlParser = new TenantSqlParser();
        tenantSqlParser.setTenantHandler(new TenantHandler() {
            @Override
            public Expression getTenantId() {
                //Todo 待设定 租户id Long类型 从缓存中取
                return new LongValue("当前租户的manager_id");
            }

            @Override
            public String getTenantIdColumn() {
                //todo 数据库租户管理的字段id 待修改
                return "manager_id";
            }

            @Override
            public boolean doTableFilter(String tableName) {
                //哪些表加租户信息 false表示加
                *//*if("system".equals(tableName)) {
                    return true;
                }*//*
                return false;
            }
        });
        iSqlParsers.add(tenantSqlParser);*/

        //让哪些方法不加租户id执行sql
        //todo 可以在具体的方法上面 加注解@SqlParser(filter=true)
        /*pi.setSqlParserFilter(new ISqlParserFilter() {
            @Override
            public boolean doFilter(MetaObject metaObject) {
                MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
                if("com.wotao.platform.mapper.userMapper.queryUserInfo".equals(ms.getId())) {
                    return true;
                }
                return false;
            }
        });*/
        //todo 动态表名实现 s实现完成之后 在每次crud时 加MybatisPlusConfiguration.myTableName.set("user_2019")
        /*DynamicTableNameParser dtnp = new DynamicTableNameParser();
        Map tableNameHandlerMap = new HashMap<>();
        //替换user表
        tableNameHandlerMap.put("user", new ITableNameHandler() {
            //tableName 替换后的表名
            @Override
            public String dynamicTableName(MetaObject metaObject, String sql, String tableName) {
                return myTableName.get();
            }
        });
        dtnp.setTableNameHandlerMap(tableNameHandlerMap);
        iSqlParsers.add(dtnp);*/


        /*pi.setSqlParserList(iSqlParsers);*/
        return pi;
    }
  1. 配置自动填充(建议必配置)
    自动填充是指 如果表中有以下那几个常量的字段,那么配置完之后 新增或编辑时会自动的去改变这几个字段,实体类以及表中字段名要对应,不然会报错
//TODO 待用户登录开发完成后从缓存中取
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    public static final String CREATE_TIME = "createTime";
    public static final String CREATE_USER_ID = "createUser";
    public static final String UPDATE_USER_ID = "editUser";
    public static final String UPDATE_TIME = "editTime";

    /**
     * 新增时自动填充createUserId 和 createTime
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        boolean hasSetterCreateTime = metaObject.hasSetter(CREATE_TIME);
        if(hasSetterCreateTime) {
            setInsertFieldValByName(CREATE_TIME, LocalDateTime.now(), metaObject);
        }
        boolean hasSetterCreateUserId = metaObject.hasSetter(CREATE_USER_ID);
        if(hasSetterCreateUserId) {
            //Todo 待修改
            setInsertFieldValByName(CREATE_USER_ID, "system", metaObject);
        }
        System.out.println("insertFill___________________________________________________________________");
    }

    /**
     * 更新时自动填充 updateTime 和 updateUserId
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        Object updateTimeValue = getFieldValByName(UPDATE_TIME, metaObject);
        if(updateTimeValue == null) {
            setUpdateFieldValByName(UPDATE_TIME, LocalDateTime.now(), metaObject);
        }
        Object updateUserIdValue = getFieldValByName(UPDATE_USER_ID, metaObject);
        if(updateUserIdValue == null) {
            //Todo 待修改
            setUpdateFieldValByName(UPDATE_USER_ID,"system", metaObject);
        }
        System.out.println("updateFill_______________________________________________________________________");
    }
}

如果想了解更多 官网是不二之选

你可能感兴趣的:(#,持久层,java,spring,boot,mybatis)