ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用mybatisplus踩的几个坑

2021-11-10 16:04:19  阅读:371  来源: 互联网

标签:mybatisplus 几个 使用 return new import com public


1.登录可自带数据隔离,其中 tenant_id 为隔离字段,在需要隔离的数据库表里定义,但是不能在代码里写  setTenantId(xxx)这样的东西,这样会让你的sql列重复!

  但是有些场景在保存时候,不需要tenant_id ,这种表需要加载 IGNORE_TENANT_TABLES 里

2.加载完配置类

globalConfig.setMetaObjectHandler(new MetaHandler()); 开启自动填充,可对一些通用字段例如 createtime  updateTime  creator 自动填入数据
 

实现方式:

import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import com.foton.framework.util.LoginUtil;
import com.google.common.collect.Lists;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.StringValue;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * MybatisPlus配置
 */
@Configuration
@MapperScan({ "com.foton.**.mapper"})
public class MybatisPlusConfig {



    /**
     * mybatios-plus乐观锁插件
     *
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }



    private static final String SYSTEM_TENANT_ID = "tenant_id";

    //忽略的表
    private static final List<String> IGNORE_TENANT_TABLES = Lists.newArrayList("dictionary",
            "sys_login_log","sys_operation_log","scheduled_record",
            "notice","notice_read_history","oil_record");

    /**
     * 租户数据隔离
     *
     * 在mapper 方法上添加 @SqlParser(filter = true) 可以忽略拦截
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        List<ISqlParser> sqlParserList = new ArrayList<>();
        TenantSqlParser tenantSqlParser = new TenantSqlParser();

        // SQL解析处理拦截:增加租户处理回调。
        tenantSqlParser.setTenantHandler(new TenantHandler() {


            @Override
            public Expression getTenantId(boolean where) {
                String currentTenantId = LoginUtil.getTenantId();
                if (StringUtils.isBlank(currentTenantId)) {
                    return new StringValue("getTenantId error.");
                }
                return new StringValue(currentTenantId);
            }

            @Override
            public String getTenantIdColumn() {
                return SYSTEM_TENANT_ID;
            }

            @Override
            public boolean doTableFilter(String tableName) {
                // 忽略掉一些表:如租户表(provider)本身不需要执行这样的处理。
                return IGNORE_TENANT_TABLES.stream().anyMatch((e) -> e.equalsIgnoreCase(tableName));
            }
        });
        paginationInterceptor.setSqlParserList(Lists.newArrayList(tenantSqlParser));
        return paginationInterceptor;
    }


    /**
     * 自动填充功能
     * @return
     */
    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MetaHandler());
        return globalConfig;
    }

}

 3.逻辑删除:

mybatisplus有逻辑删除的功能,无需写update方法,修改is_delete字段

实现方式:

 

 直接调用BaseMapper的deleteById就会自动给你update成-1,并且所有查询方法也将自动加上 is_delete = 0过去掉 逻辑删除的记录

 

 

 

标签:mybatisplus,几个,使用,return,new,import,com,public
来源: https://www.cnblogs.com/charkey/p/15533851.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有