最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案

 更新時(shí)間:2021年04月28日 10:34:58   作者:一個(gè)抓手  
這篇文章主要介紹了詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案,本文分兩步,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.定義一個(gè)TenantLineHandler的實(shí)現(xiàn)類(lèi):

import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.google.common.collect.Lists;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
 
import java.util.List;
 
/**
 * 多租戶處理插件
 *
 * @author 向振華
 * @date 2021/04/26 13:37
 */
public class CustomTenantLineHandler implements TenantLineHandler {
 
    /**
     * 忽略添加租戶ID的表
     */
    private final static List<String> IGNORE_TABLE_NAMES = Lists.newArrayList(
            "t_country",
            "t_language"
    );
 
    /**
     * 獲取租戶ID值表達(dá)式(可從cookie、token、緩存中取)
     *
     * @return
     */
    @Override
    public Expression getTenantId() {
        return new LongValue(1L);
    }
 
    /**
     * 獲取租戶字段名(數(shù)據(jù)庫(kù)的租戶ID字段名)
     *
     * @return
     */
    @Override
    public String getTenantIdColumn() {
        return "tenant_id";
    }
 
    /**
     * 根據(jù)表名判斷是否忽略拼接多租戶條件
     *
     * @param tableName
     * @return
     */
    @Override
    public boolean ignoreTable(String tableName) {
        return IGNORE_TABLE_NAMES.contains(tableName);
    }
}

2.定義MybatisPlusConfig配置類(lèi)將多租戶插件生效:

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.bzcst.bop.component.mybatis.config.handler.AutoFillMetaObjectHandler;
import com.bzcst.bop.component.mybatis.config.handler.CustomTenantLineHandler;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * @author 向振華
 * @date 2021/04/26 14:45
 */
@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
 
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 多租戶插件(注意:這個(gè)一定要放在最上面)
        interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new CustomTenantLineHandler()));
        // 分頁(yè)插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
 
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> configuration.setUseDeprecatedExecutor(false);
    }
 
    @Bean
    public AutoFillMetaObjectHandler fillMetaObjectHandler() {
        return new AutoFillMetaObjectHandler();
    }
}

測(cè)試

@Test
    public void select() {
        Role role = roleService.getById(40L);
        System.out.println(role);
    }
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2fedfff1] was not registered for synchronization because synchronization is not active
Original SQL: SELECT id,tenant_id,frame_id,name,type,description,meta_created,meta_updated,meta_logic_flag FROM t_sec_role WHERE id=? 
parser sql: SELECT id, tenant_id, frame_id, name, type, description, meta_created, meta_updated, meta_logic_flag FROM t_sec_role WHERE id = ? AND tenant_id = 1
2021-04-26 14:58:55.534  INFO 24980 --- [           main] com.zaxxer.hikari.HikariDataSource       : DatebookHikariCP - Starting...
2021-04-26 14:58:55.903  INFO 24980 --- [           main] com.zaxxer.hikari.HikariDataSource       : DatebookHikariCP - Start completed.
JDBC Connection [HikariProxyConnection@1100660981 wrapping com.mysql.cj.jdbc.ConnectionImpl@628fa8ea] will not be managed by Spring
==>  Preparing: SELECT id, tenant_id, frame_id, name, type, description, meta_created, meta_updated, meta_logic_flag FROM t_sec_role WHERE id = ? AND tenant_id = 1
==> Parameters: 40(Long)
<==    Columns: id, tenant_id, frame_id, name, type, description, meta_created, meta_updated, meta_logic_flag
<==        Row: 40, 1, 123, 一個(gè)角色啊, 2, haha, 2021-04-26 14:07:42, 2021-04-26 14:07:42, 1
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2fedfff1]
Role(id=40, sasTenantId=1, orgFrameId=123, name=一個(gè)角色啊, type=2, description=haha, metaCreated=Mon Apr 26 14:07:42 CST 2021, metaUpdated=Mon Apr 26 14:07:42 CST 2021, metaLogicFlag=1)

可以看到查詢(xún)語(yǔ)句后面拼接了tenant_id = 1

==>  Preparing: SELECT id, tenant_id, frame_id, name, type, description, meta_created, meta_updated, meta_logic_flag FROM t_sec_role WHERE id = ? AND tenant_id = 1

注意:如果表中沒(méi)有定義tenant_id會(huì)報(bào)錯(cuò),不需要添加多租戶的表配置到CustomTenantLineHandler 中的IGNORE_TABLE_NAMES集合中

到此這篇關(guān)于詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案的文章就介紹到這了,更多相關(guān)MybatisPlus多租戶內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaEE通過(guò)response實(shí)現(xiàn)請(qǐng)求重定向

    JavaEE通過(guò)response實(shí)現(xiàn)請(qǐng)求重定向

    這篇文章主要介紹了JavaEE通過(guò)response實(shí)現(xiàn)請(qǐng)求重定向的方法,非常的簡(jiǎn)單實(shí)用,有需要的朋友可以參考下
    2014-10-10
  • MybatisPlus插件自動(dòng)維護(hù)更新和創(chuàng)建時(shí)間方式

    MybatisPlus插件自動(dòng)維護(hù)更新和創(chuàng)建時(shí)間方式

    這篇文章主要介紹了MybatisPlus插件自動(dòng)維護(hù)更新和創(chuàng)建時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • JAVA位運(yùn)算的知識(shí)點(diǎn)總結(jié)

    JAVA位運(yùn)算的知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于JAVA有關(guān)位運(yùn)算的全套梳理,需要的朋友們可以參考學(xué)習(xí)下。
    2020-03-03
  • MyBatisPlus的IService接口實(shí)現(xiàn)

    MyBatisPlus的IService接口實(shí)現(xiàn)

    MyBatisPlus是一個(gè)為MyBatis提供增強(qiáng)的工具,它通過(guò)IService接口簡(jiǎn)化了數(shù)據(jù)庫(kù)的CRUD操作,IService接口封裝了一系列常用的數(shù)據(jù)操作方法,本文就來(lái)介紹一下,感興趣的可以了解一下
    2024-10-10
  • Java中的逃逸問(wèn)題心得

    Java中的逃逸問(wèn)題心得

    本篇文章是作者在學(xué)習(xí)了Java中的逃逸相關(guān)知識(shí)后的心得分享,一起跟著小編學(xué)習(xí)下。
    2018-02-02
  • mybatis的增刪改查運(yùn)用方式

    mybatis的增刪改查運(yùn)用方式

    這篇文章主要介紹了mybatis的增刪改查運(yùn)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java8?Stream流的常用方法匯總

    Java8?Stream流的常用方法匯總

    Java8?API添加了一個(gè)新的抽象稱(chēng)為流Stream,可以讓你以一種聲明的方式處理數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java8?Stream流的常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • SpringBoot 3.0 新特性?xún)?nèi)置聲明式HTTP客戶端實(shí)例詳解

    SpringBoot 3.0 新特性?xún)?nèi)置聲明式HTTP客戶端實(shí)例詳解

    聲明式 http 客戶端主旨是使得編寫(xiě) java http 客戶端更容易,為了貫徹這個(gè)理念,采用了通過(guò)處理注解來(lái)自動(dòng)生成請(qǐng)求的方式,本文給大家詳解介紹SpringBoot 聲明式HTTP客戶端相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • 關(guān)于mybatis調(diào)用存儲(chǔ)過(guò)程獲取返回值問(wèn)題

    關(guān)于mybatis調(diào)用存儲(chǔ)過(guò)程獲取返回值問(wèn)題

    這篇文章主要介紹了mybatis調(diào)用存儲(chǔ)過(guò)程獲取返回值問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • SpringBoot之導(dǎo)入靜態(tài)資源詳解

    SpringBoot之導(dǎo)入靜態(tài)資源詳解

    今天帶大家學(xué)習(xí)SpringBoot導(dǎo)入靜態(tài)資源的過(guò)程,文中介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

吴江市| 邳州市| 岳阳市| 塔河县| 五华县| 邯郸市| 阿尔山市| 玉龙| 调兵山市| 临沭县| 新河县| 江川县| 呼和浩特市| 崇礼县| 贺州市| 广元市| 谷城县| 大余县| 漾濞| 阳西县| 襄樊市| 甘德县| 九江市| 尖扎县| 长治市| 射阳县| 都匀市| 平泉县| 射阳县| 兰西县| 北安市| 政和县| 林甸县| 新宁县| 绥中县| 贞丰县| 海南省| 嘉峪关市| 四子王旗| 沛县| 赣州市|