<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      springboot~mybatis-plus的DynamicTableNameInnerInterceptor實現分表

      超輕量級

      DynamicTableNameInnerInterceptor是mybatis-plug的一個攔截器插件,可以自己定義需要攔截的表單,然后對它進行加工,這時mybatis-plus就會把SQL代碼的表名加上你的這個裝飾。

      封裝的思想

      我們通常把mybatis做成一個包,公司其它同事直接使用咱們的包,包里會統一定義數據基類數據分頁數據脫敏、審計字段填充等特性,開發人員不需要關注這些內容,這些內容會被自己注冊;或者人開發人員可以直接繼承它們,直接使用即可。

      • 插件注冊器
      @Configuration
      public class MybatisPlusConfig implements ApplicationContextAware {
      
      	ApplicationContext applicationContext;
      
      	/**
      	 * 攔截器
      	 */
      	@Bean
      	public MybatisPlusInterceptor mybatisPlusInterceptor() {
      		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      		// 分頁插件, 對于單一數據庫類型來說,都建議配置該值,避免每次分頁都去抓取數據庫類型
      		interceptor.addInnerInterceptor(new LindPaginationInnerInterceptor());
      		// 防止全表更新與刪除
      		interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
      		// 加載個性化的分表配置,它可能是用戶在當前項目定義的,然后我們統一對它們進行裝配
      		Optional.ofNullable(applicationContext.getBeanNamesForType(DynamicTableNameInnerInterceptor.class))
      				.ifPresent(o -> {
      					for (String beanName : o) {
      						DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = applicationContext
      								.getBean(beanName, DynamicTableNameInnerInterceptor.class);
      						interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
      					}
      				});
      		return interceptor;
      	}
      .....
      }
      

      通過上面的代碼我們知道,在外部定義的DynamicTableNameInnerInterceptor對象,會被自動的注冊到mybatis-plus的組件中,開發人員在具體項目里不需要再次注冊。

      • 開發人員在項目中定義一個t_log表,按時間進行分表
      	@Bean
      	public DynamicTableNameInnerInterceptor tableNamePlusInterceptor() {
      		DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
      		HashMap<String, TableNameHandler> map = new HashMap<String, TableNameHandler>();
      
      		map.put("t_log", new DaysTableNameParser());
      
      		dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);
      		return dynamicTableNameInnerInterceptor;
      	}
      

      所依賴的版本

      mybatis-plus各版本對動態表名這塊支持都不一樣,很多方法和類在新版本中被刪除

      com.baomidou:mybatis-plus-boot-starter:3.4.3
      

      代碼的測試

      	@Test(expected = BadSqlGrammarException.class)
      	public void insertLog() {
      		TLog log = new TLog();
      		log.setMessage("測試");
      		logDao.insert(log);
      	}
      

      生成的sql代碼如下

      [main] DEBUG com.lind.mybatis.dao.LogDao.insert - ==>  Preparing: INSERT INTO t_log_20230524 ( id, message, create_by, create_time, update_by, update_time, del_flag ) VALUES ( ?, ?, ?, ?, ?, ?, ? )
      

      需要注意的是,無論是sharding-jdbc還是mybatis-plus-DynamicTableNameInnerInterceptor組成的分表,咱們都需要提前把數據表建立出來,他們這些組件是不會自動建表的。

      posted @ 2023-05-24 14:07  張占嶺  閱讀(1614)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产自拍偷拍视频在线观看| 日本久久一区二区免高清| 全南县| 亚洲区一区二区三区亚洲| 丰满无码人妻热妇无码区| 伊人久久大香线蕉AV网禁呦| 巨熟乳波霸若妻在线播放| 成年在线观看免费人视频| 亚洲成人av高清在线| 欧美性受xxxx白人性爽| 久久亚洲国产精品五月天| 亚洲中文久久久精品无码| 日韩精品中文字幕亚洲| 污网站在线观看视频| 国产乱人激情H在线观看| 国产成人综合网亚洲第一| 亚洲人成网站999久久久综合| 亚洲国家av一区二区| 中文国产成人精品久久不卡| 人妻系列无码专区免费| 免费观看成人毛片a片| 三上悠亚精品一区二区久久| 亚洲丶国产丶欧美一区二区三区| 和硕县| 67194熟妇在线观看线路| 亚洲国产欧美在线人成| 免费看无码自慰一区二区| 国产在线线精品宅男网址| 激情亚洲一区国产精品| 和黑人中出一区二区三区| 小污女小欲女导航| 亚洲中文字幕在线二页| 最新国产AV最新国产在钱| 亚洲精品日韩在线观看| 久久午夜私人影院| 岛国最新亚洲伦理成人| 福利视频一区二区在线| 亚洲精品国产综合麻豆久久99 | 国产成人精品a视频| 日本精品极品视频在线| 久久综合精品成人一本|