国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用mybatis和dynamic-datasource-spring-boot-starter動(dòng)態(tài)切換數(shù)據(jù)源操作數(shù)據(jù)庫

這篇具有很好參考價(jià)值的文章主要介紹了使用mybatis和dynamic-datasource-spring-boot-starter動(dòng)態(tài)切換數(shù)據(jù)源操作數(shù)據(jù)庫。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

記錄:415

場(chǎng)景:使用mybatis和dynamic-datasource-spring-boot-starter動(dòng)態(tài)切換數(shù)據(jù)源操作數(shù)據(jù)庫。

版本:JDK 1.8,Spring?Boot 2.6.3,dynamic-datasource-spring-boot-starter-3.3.2,mybatis-3.5.9。

源碼:https://github.com/baomidou/dynamic-datasource-spring-boot-starter

dynamic-datasource-spring-boot-starter:一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器。

1.動(dòng)態(tài)數(shù)據(jù)源注解@DS作用在類上

1.1GetDataMapper接口和XML

1.1.1GetDataMapper接口

@DS("hub_a_db")
@Repository
public interface GetDataMapper {
  List<Map<String, Object>> getData(List<Long> paraList);
}

1.1.2GetDataMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hub.example.load.mapper.GetDataMapper">
  <select id="getData" resultType="java.util.Map">
    select CITY_ID AS "cityId",
    CITY_NAME AS "cityName",
    LAND_AREA AS "landArea",
    POPULATION AS "population",
    GROSS AS "gross",
    CITY_DESCRIBE AS "cityDescribe",
    DATA_YEAR AS "dataYear",
    UPDATE_TIME AS "updateTime"
    from t_city
    WHERE CITY_ID IN
    <foreach collection="list" item="cityId" open="(" separator="," close=")">
        #{cityId}
    </foreach>
  </select>
</mapper>

1.2InsertDataMapper接口和XML

1.2.1InsertDataMapper接口

@DS("hub_b_db")
@Repository
public interface InsertDataMapper {
  void insertData(List<Map<String, Object>> data);
}

1.2.2InsertDataMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hub.example.load.mapper.InsertDataMapper">
  <insert id="insertData" parameterType="java.util.List">
    insert into t_city_01 (CITY_ID,
    CITY_NAME,
    LAND_AREA,
    POPULATION,
    GROSS,
    CITY_DESCRIBE,
    DATA_YEAR,
    UPDATE_TIME)
    values
    <foreach collection="list" item="city" open="" separator="," close="">
        (#{city.cityId},
        #{city.cityName},
        #{city.landArea},
        #{city.population},
        #{city.gross},
        #{city.cityDescribe},
        #{city.dataYear},
        #{city.updateTime})
    </foreach>
  </insert>
</mapper>

2.動(dòng)態(tài)數(shù)據(jù)源注解@DS作用在方法

2.1GetAndInsertDataMapper接口

@Repository
public interface GetAndInsertDataMapper {
  @DS("hub_a_db")
  List<Map<String, Object>> getData(List<Long> paraList);
  @DS("hub_b_db")
  void insertData(List<Map<String, Object>> data);
}

2.2GetAndInsertDataMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hub.example.load.mapper.GetAndInsertDataMapper">
  <select id="getData" resultType="java.util.Map">
      select CITY_ID AS "cityId",
      CITY_NAME AS "cityName",
      LAND_AREA AS "landArea",
      POPULATION AS "population",
      GROSS AS "gross",
      CITY_DESCRIBE AS "cityDescribe",
      DATA_YEAR AS "dataYear",
      UPDATE_TIME AS "updateTime"
      from t_city
      WHERE CITY_ID IN
      <foreach collection="list" item="cityId" open="(" separator="," close=")">
          #{cityId}
      </foreach>
  </select>
  <insert id="insertData" parameterType="java.util.List">
      insert into t_city_01 (CITY_ID,
      CITY_NAME,
      LAND_AREA,
      POPULATION,
      GROSS,
      CITY_DESCRIBE,
      DATA_YEAR,
      UPDATE_TIME)
      values
      <foreach collection="list" item="city" open="" separator="," close="">
          (#{city.cityId},
          #{city.cityName},
          #{city.landArea},
          #{city.population},
          #{city.gross},
          #{city.cityDescribe},
          #{city.dataYear},
          #{city.updateTime})
      </foreach>
  </insert>
</mapper>

3.使用DynamicDataSourceContextHolder操作動(dòng)態(tài)數(shù)據(jù)源

不使用注解,在調(diào)用時(shí),使用DynamicDataSourceContextHolder操作動(dòng)態(tài)數(shù)據(jù)源。

3.1GetAndInsertDataByHolderMapper接口

@Repository
public interface GetAndInsertDataByHolderMapper {
  @DS("hub_a_db")
  List<Map<String, Object>> getData(List<Long> paraList);
  @DS("hub_b_db")
  void insertData(List<Map<String, Object>> data);
}

3.2GetAndInsertDataByHolderMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hub.example.load.mapper.GetAndInsertDataByHolderMapper">
  <select id="getData" resultType="java.util.Map">
      select CITY_ID AS "cityId",
      CITY_NAME AS "cityName",
      LAND_AREA AS "landArea",
      POPULATION AS "population",
      GROSS AS "gross",
      CITY_DESCRIBE AS "cityDescribe",
      DATA_YEAR AS "dataYear",
      UPDATE_TIME AS "updateTime"
      from t_city
      WHERE CITY_ID IN
      <foreach collection="list" item="cityId" open="(" separator="," close=")">
          #{cityId}
      </foreach>
  </select>
  <insert id="insertData" parameterType="java.util.List">
      insert into t_city_01 (CITY_ID,
      CITY_NAME,
      LAND_AREA,
      POPULATION,
      GROSS,
      CITY_DESCRIBE,
      DATA_YEAR,
      UPDATE_TIME)
      values
      <foreach collection="list" item="city" open="" separator="," close="">
          (#{city.cityId},
          #{city.cityName},
          #{city.landArea},
          #{city.population},
          #{city.gross},
          #{city.cityDescribe},
          #{city.dataYear},
          #{city.updateTime})
      </foreach>
  </insert>
</mapper>

4.測(cè)試類

4.1測(cè)試類

@Slf4j
@RestController
@RequestMapping("/hub/example/load01")
public class LoadController {
  @Autowired
  private GetDataMapper getDataMapper;
  @Autowired
  private InsertDataMapper insertDataMapper;
  @Autowired
  private GetAndInsertDataMapper getAndInsertDataMapper;
  @Autowired
  private GetAndInsertDataByHolderMapper getAndInsertDataByHolderMapper;
  /**
   * 1.動(dòng)態(tài)數(shù)據(jù)源注解@DS作用在類上
   * */
  @GetMapping("/load01")
  public Object load01() {
    log.info("測(cè)試開始...");
    List<Long> paraList =  Arrays.asList(1L,2L,3L);
    List<Map<String, Object>> data = getDataMapper.getData(paraList);
    insertDataMapper.insertData(data);
    log.info("測(cè)試結(jié)束...");
    return "執(zhí)行成功";
  }
  /**
   * 2.動(dòng)態(tài)數(shù)據(jù)源注解@DS作用在方法上
   * */
  @GetMapping("/load02")
  public Object load02() {
    log.info("測(cè)試開始...");
    List<Long> paraList =  Arrays.asList(1L,2L,3L);
    List<Map<String, Object>> data = getAndInsertDataMapper.getData(paraList);
    getAndInsertDataMapper.insertData(data);
    log.info("測(cè)試結(jié)束...");
    return "執(zhí)行成功";
  }
  /**
   * 3.使用DynamicDataSourceContextHolder操作動(dòng)態(tài)數(shù)據(jù)源
   * */
  @GetMapping("/load03")
  public Object load03() {
    log.info("測(cè)試開始...");
    //1.使用hub_a_db數(shù)據(jù)源讀數(shù)據(jù)
    DynamicDataSourceContextHolder.push("hub_a_db");
    List<Long> paraList =  Arrays.asList(1L,2L,3L);
    List<Map<String, Object>> data = getAndInsertDataByHolderMapper.getData(paraList);
    //2.使用hub_b_db數(shù)據(jù)源寫數(shù)據(jù)
    DynamicDataSourceContextHolder.poll();
    DynamicDataSourceContextHolder.push("hub_b_db");
    getAndInsertDataByHolderMapper.insertData(data);
    log.info("測(cè)試結(jié)束...");
    return "執(zhí)行成功";
  }
}

5.基礎(chǔ)配置

5.1配置動(dòng)態(tài)數(shù)據(jù)源

spring:
  jackson:
    time-zone: GMT+8
  datasource:
    dynamic:
      primary: hub_a_db
      strict: false
      datasource:
        hub_a_db:
          url: jdbc:mysql://127.0.0.1:3306/hub_a_db
          username: hub_a
          password: 12345678
          driver-class-name: com.mysql.cj.jdbc.Driver
        hub_b_db:
          url: jdbc:mysql://127.0.0.1:3306/hub_b_db
          username: hub_b
          password: 12345678
          driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath*:mapper/**/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

5.2動(dòng)態(tài)數(shù)據(jù)源依賴包

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>3.3.2</version>
</dependency>

5.3建表語句

CREATE TABLE t_city (
  CITY_ID BIGINT(16) NOT NULL COMMENT '唯一標(biāo)識(shí)',
  CITY_NAME VARCHAR(64) COLLATE utf8_bin NOT NULL COMMENT '城市名',
  LAND_AREA DOUBLE DEFAULT NULL COMMENT '城市面積',
  POPULATION BIGINT(16) DEFAULT NULL COMMENT '城市人口',
  GROSS DOUBLE DEFAULT NULL COMMENT '生產(chǎn)總值',
  CITY_DESCRIBE VARCHAR(512) COLLATE utf8_bin DEFAULT NULL COMMENT '城市描述',
  DATA_YEAR VARCHAR(16) COLLATE utf8_bin DEFAULT NULL COMMENT '數(shù)據(jù)年份',
  UPDATE_TIME DATETIME DEFAULT NULL COMMENT '更新時(shí)間'
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='城市信息表';

以上,感謝。

2023年4月18日文章來源地址http://www.zghlxwxcb.cn/news/detail-417932.html

到了這里,關(guān)于使用mybatis和dynamic-datasource-spring-boot-starter動(dòng)態(tài)切換數(shù)據(jù)源操作數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 分享一個(gè)優(yōu)秀的動(dòng)態(tài)數(shù)據(jù)源開源庫-dynamic-datasource-spring-boot-starter

    分享一個(gè)優(yōu)秀的動(dòng)態(tài)數(shù)據(jù)源開源庫-dynamic-datasource-spring-boot-starter

    在我們的Java后端研發(fā)工作中, 有時(shí)候由于業(yè)務(wù)的快速迭代和數(shù)據(jù)的安全隔離性,往往會(huì)為不同的 API業(yè)務(wù)線分配不同的數(shù)據(jù)庫,即一個(gè)微服務(wù)經(jīng)常需要和多個(gè)數(shù)據(jù)源打交道。 dynamic-datasource-spring-boot-starter 是一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器。 其支持 Jdk 1.7+, Spring

    2024年02月12日
    瀏覽(18)
  • spring boot mybatis-plus dynamic-datasource 配置文件 相關(guān)依賴環(huán)境配置

    spring boot mybatis-plus dynamic-datasource 配置文件 相關(guān)依賴環(huán)境配置

    spring boot mybatis-plus dynamic-datasource 配置文件 相關(guān)依賴環(huán)境配置 ##yaml配置 ##父級(jí)pom.xml配置 ##子模塊pom.xml配置 ##表結(jié)構(gòu) ##Test.java ##TestMapper.xml ##TestMapper.java ##TestService.java ##TestController ##項(xiàng)目啟動(dòng)類BootStrap.java ##瀏覽器訪問 192.168.3.188:8866/yym/test/v1/test

    2024年02月02日
    瀏覽(31)
  • Dynamic DataSource 多數(shù)據(jù)源配置【 Springboot + DataSource + MyBatis Plus + Druid】

    Dynamic DataSource 多數(shù)據(jù)源配置【 Springboot + DataSource + MyBatis Plus + Druid】

    MybatisPlus多數(shù)據(jù)源配置主要解決的是多數(shù)據(jù)庫連接和切換的問題。在一些大型應(yīng)用中,由于數(shù)據(jù)量的增長(zhǎng)或者業(yè)務(wù)模塊的增多,可能需要訪問多個(gè)數(shù)據(jù)庫。這時(shí),就需要配置多個(gè)數(shù)據(jù)源。 2.1.1、引用依賴 2.1.2、application.yml 配置 2.1.3、通用配置類 2.1.4、使用方式 這里便不過多的

    2024年02月03日
    瀏覽(32)
  • Springboot+mybatis-plus+dynamic-datasource+Druid 多數(shù)據(jù)源 分布式事務(wù)

    Springboot+mybatis-plus+dynamic-datasource+Druid 多數(shù)據(jù)源 分布式事務(wù)

    背景 處理多數(shù)據(jù)源事務(wù)一直是一個(gè)復(fù)雜而棘手的問題,通常我們有兩種主流的解決方法。 第一種是通過Atomikos手動(dòng)創(chuàng)建多數(shù)據(jù)源事務(wù),這種方法更適合數(shù)據(jù)源數(shù)量較少,參數(shù)配置不復(fù)雜,對(duì)性能要求不高的項(xiàng)目。然而,這種方法的最大困難在于需要手動(dòng)配置大量設(shè)置,這可能

    2024年02月11日
    瀏覽(26)
  • springboot dynamic-datasource 實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源-多租戶-配置文件切換-基于dynamic-datasource

    1、實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源 2、實(shí)現(xiàn)配置多數(shù)據(jù)源 3、實(shí)現(xiàn)讀寫分離也可以用多數(shù)據(jù)源方式 4、選擇 dynamic-datasource集成了很多ORM的框架,其中,使用比較多的是druid,但有一些東西開始收費(fèi)了 druid也可以自行配置,配置多了點(diǎn) 目前版本只支持單一位置加載數(shù)據(jù)源(只能從配置文件或

    2024年02月09日
    瀏覽(17)
  • dynamic-datasource can not find primary datasource

    dynamic-datasource can not find primary datasource

    動(dòng)態(tài)數(shù)據(jù)源找不到主數(shù)據(jù)源 可能導(dǎo)入多數(shù)據(jù)源依賴導(dǎo)致 把依賴注釋 運(yùn)行成功

    2024年02月08日
    瀏覽(19)
  • 微服務(wù)springcloud啟動(dòng)報(bào)錯(cuò):com.baomidou.dynamic.datasource.exception.CannotFindDaataSourceException: dynamic

    微服務(wù)springcloud啟動(dòng)報(bào)錯(cuò):com.baomidou.dynamic.datasource.exception.CannotFindDaataSourceException: dynamic

    原因:編碼不一致導(dǎo)致的 解決辦法:如下圖所示,進(jìn)行相應(yīng)設(shè)置就行 ?

    2024年01月25日
    瀏覽(21)
  • Springboot+dynamic-datasource+Druid數(shù)據(jù)庫配置加密

    Springboot+dynamic-datasource+Druid數(shù)據(jù)庫配置加密

    Springboot+mybatis-plus+dynamic-datasource+Druid數(shù)據(jù)庫配置加密 背景 生產(chǎn)環(huán)境中, 為了保密,我們希望將數(shù)據(jù)庫密碼加密, 甚至用戶名和jdbc連接串加密。本章我們使用由苞米豆(baomidou)團(tuán)隊(duì)開發(fā)的 dynamic-datasource 多數(shù)據(jù)源組件自帶的加密工具實(shí)現(xiàn)數(shù)據(jù)庫配置加密 從 dynamic-datasource-star

    2024年02月04日
    瀏覽(42)
  • 【源碼解析】多數(shù)據(jù)源 dynamic-datasource快速入門及源碼解析

    【源碼解析】多數(shù)據(jù)源 dynamic-datasource快速入門及源碼解析

    啟動(dòng)的時(shí)候,會(huì)加載在 dynamic-datasource-spring-boot-starter 的jar包中的 spring.factories 在 DynamicDataSourceAutoConfiguration 會(huì)注入 DynamicRoutingDataSource DynamicRoutingDataSource#afterPropertiesSet ,系統(tǒng)啟動(dòng)的時(shí)候會(huì)加載所有的數(shù)據(jù)源 在 DynamicDataSourceAutoConfiguration 會(huì)注入 DynamicDataSourceProvider AbstractData

    2023年04月21日
    瀏覽(20)
  • Springboot 多數(shù)據(jù)源 dynamic-datasource動(dòng)態(tài)添加移除數(shù)據(jù)源

    Springboot 多數(shù)據(jù)源 dynamic-datasource動(dòng)態(tài)添加移除數(shù)據(jù)源

    上一篇文章我們講了如何通過多數(shù)據(jù)源組件,在Spring boot Druid 連接池項(xiàng)目中配置多數(shù)據(jù)源,并且通過@DS注解的方式切換數(shù)據(jù)源,《Spring Boot 配置多數(shù)據(jù)源【最簡(jiǎn)單的方式】》。但是在多租戶的業(yè)務(wù)場(chǎng)景中,我們通常需要手動(dòng)的切換數(shù)據(jù)源,那么本文將解答你的額疑惑。 dynam

    2024年02月13日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包