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

mybatis-plus動態(tài)表名的實現(xiàn)示例

 更新時間:2021年04月04日 11:25:00   作者:漣漪海洋  
這篇文章主要介紹了mybatis-plus動態(tài)表名的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

背景

在分表的背景下,有時候查詢數(shù)據(jù)的時候需要跨表查詢,那此時就需要MP在解析的時候,能夠很好的自適應表格名稱

實現(xiàn)

MP中是通過PaginationInterceptor(分頁插件)完成動態(tài)表名解析的,配置如下:

數(shù)據(jù)庫中表

依賴

<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-boot-starter</artifactId>
 <version>3.3.1.tmp</version>
</dependency>

配置類

package com.huanchuang.common.config;
 
import com.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;
import com.baomidou.mybatisplus.extension.parsers.ITableNameHandler;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import java.util.Collections;
import java.util.HashMap;
 
/**
 * @Package: com.huanchuang.common.config
 * @Description: <mybatis-plush配置類>
 * @Author: MILLA
 * @CreateDate: 2020/09/04 14:42
 * @UpdateUser: MILLA
 * @UpdateDate: 2020/09/04 14:42
 * @UpdateRemark: <>
 * @Version: 1.0
 */
@Configuration
@MapperScan("com.huanchuang.ext.mapper**")
@ConditionalOnProperty(prefix = "spring.config", name = "enableMybatisPlusDynamicTable", havingValue = "true")
public class MybatisPlusDynamicTableConfig {
 
 private static final String DYNAMIC_TABLE_PRE = "common_user";
 
 /**
  * mybatis-plus分頁插件
  */
 @Bean
 public PaginationInterceptor paginationInterceptor() {
  PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  // 設置請求的頁面大于最大頁后操作, true調回到首頁,false 繼續(xù)請求 默認false
  paginationInterceptor.setOverflow(false);
  // 設置最大單頁限制數(shù)量,默認 500 條,-1 不受限制
  paginationInterceptor.setLimit(500);
//  // 開啟 count 的 join 優(yōu)化,只針對部分 left join
  paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
  DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
  dynamicTableNameParser.setTableNameHandlerMap(new HashMap<String, ITableNameHandler>(2) {{
   //動態(tài)表規(guī)則-生成自己需要的動態(tài)表名
   put(DYNAMIC_TABLE_PRE, (metaObject, sql, tableName) -> DynamicTableTreadLocal.INSTANCE.getTableName());
  }});
  paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));
  return paginationInterceptor;
 }
}

動態(tài)表名存儲類

package com.huanchuang.common.config;
 
/**
 * @Package: com.huanchuang.common.config
 * @Description: <動態(tài)表格存儲類>
 * @Author: MILLA
 * @CreateDate: 2020/09/04 14:42
 * @UpdateUser: MILLA
 * @UpdateDate: 2020/09/04 14:42
 * @UpdateRemark: <>
 * @Version: 1.0
 */
public enum DynamicTableTreadLocal {
 INSTANCE;
 private ThreadLocal<String> tableName = new ThreadLocal<>();
 
 public String getTableName() {
  return tableName.get();
 }
 
 public void setTableName(String tableName) {
  this.tableName.set(tableName);
 }
 
 public void remove() {
  tableName.remove();
 }
 
}

使用

 private void select(int year) {
 
   DynamicTableTreadLocal.INSTANCE.setTableName("user_" + year);
   LambdaQueryWrapper<SparkDownSample> wrapper = Wrappers.lambdaQuery(User.class);
   List<User> userList = userMapper.list(wrapper )
 
 }
@Data
public class User {
 
 private Long id;
 
 private String userName;
 
 private String address;
 
 private char sex;
 
 private Byte age;
 
}

原理

以mybatis的query方法作為入口通過動態(tài)代理執(zhí)行到配置的分頁插件通過分頁插件進行sql解析根據(jù)分頁插件中配置的tableNameHandler進行目標表格的替換最后形成一個可執(zhí)行sql,執(zhí)行查詢

到此這篇關于mybatis-plus動態(tài)表名的實現(xiàn)示例的文章就介紹到這了,更多相關mybatis-plus 動態(tài)表名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java Spring Boot 配置redis pom文件操作

    java Spring Boot 配置redis pom文件操作

    這篇文章主要介紹了java Spring Boot 配置redis pom文件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Java無界阻塞隊列DelayQueue詳細解析

    Java無界阻塞隊列DelayQueue詳細解析

    這篇文章主要介紹了Java無界阻塞隊列DelayQueue詳細解析,DelayQueue是一個支持時延獲取元素的無界阻塞隊列,隊列使用PriorityQueue來實現(xiàn),隊列中的元素必須實現(xiàn)Delayed接口,在創(chuàng)建元素時可以指定多久才能從隊列中獲取當前元素,需要的朋友可以參考下
    2023-12-12
  • Java Socket循環(huán)接收數(shù)據(jù)readLine()阻塞的解決方案

    Java Socket循環(huán)接收數(shù)據(jù)readLine()阻塞的解決方案

    這篇文章主要介紹了Java Socket循環(huán)接收數(shù)據(jù)readLine()阻塞的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Mybatis控制臺打印Sql語句的實現(xiàn)代碼

    Mybatis控制臺打印Sql語句的實現(xiàn)代碼

    MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架,下面給大家介紹Mybatis控制臺打印Sql語句的實現(xiàn)代碼,非常不錯,感興趣的朋友一起看下吧
    2016-07-07
  • Java中的幾種讀取properties配置文件的方式

    Java中的幾種讀取properties配置文件的方式

    這篇文章主要介紹了Java中的幾種讀取properties配置文件的方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring事務管理中關于數(shù)據(jù)庫連接池詳解

    Spring事務管理中關于數(shù)據(jù)庫連接池詳解

    事務的作用就是為了保證用戶的每一個操作都是可靠的,事務中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就 回退到事務開始未進行操作的狀態(tài)。事務管理是Spring框架中最為常用的功能之一,我們在使用Spring Boot開發(fā)應用時,大部分情況下也都需要使用事務
    2022-12-12
  • java使用POI讀取properties文件并寫到Excel的方法

    java使用POI讀取properties文件并寫到Excel的方法

    這篇文章主要介紹了java使用POI讀取properties文件并寫到Excel的方法,涉及java操作properties文件及Excel文件的相關技巧,需要的朋友可以參考下
    2015-06-06
  • Java頻繁創(chuàng)建線程排查和解決方案

    Java頻繁創(chuàng)建線程排查和解決方案

    文章討論了Java線程池的使用和配置,以及線程對內存的影響,作者通過實驗和理論分析,指出線程并不是占用JVM的內存,而是由操作系統(tǒng)分配的本地線程,文章還提到了線程池的優(yōu)點,如節(jié)省系統(tǒng)開銷、提高性能和方便控制
    2025-02-02
  • Springboot項目通過redis實現(xiàn)接口的冪等性

    Springboot項目通過redis實現(xiàn)接口的冪等性

    這篇文章主要為大家介紹了Springboot項目通過redis實現(xiàn)接口的冪等性,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • SpringSecurity授權實現(xiàn)基本思路

    SpringSecurity授權實現(xiàn)基本思路

    本文介紹了SpringSecurity中使用FilterSecurityInterceptor進行權限校驗的基本方法,通過SecurityContextHolder獲取Authentication中的權限信息,感興趣的朋友跟隨小編一起看看吧
    2024-10-10

最新評論

勃利县| 新沂市| 太原市| 田东县| 中西区| 五河县| 平顶山市| 游戏| 恭城| 外汇| 离岛区| 库伦旗| 济阳县| 镇江市| 衢州市| 亳州市| 葫芦岛市| 浑源县| 伊吾县| 阿克苏市| 乡城县| 日照市| 临猗县| 石屏县| 乐昌市| 大宁县| 周口市| 娄烦县| 江西省| 澳门| 奉化市| 都昌县| 图片| 扶沟县| 西贡区| 阳江市| 朝阳区| 漯河市| 凤山县| 罗田县| 铜梁县|