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

Springboot集成mybatis實現(xiàn)多數(shù)據(jù)源配置詳解流程

 更新時間:2022年06月10日 11:36:32   作者:ldcaws  
在日常開發(fā)中,若遇到多個數(shù)據(jù)源的需求,怎么辦呢?通過springboot集成mybatis實現(xiàn)多數(shù)據(jù)源配置,簡單嘗試一下,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

新建springboot工程,引入web、mysql、mybatis依賴

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

在application.properties中配置多數(shù)據(jù)源

spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/ds0
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/ds1
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver

多數(shù)據(jù)源配置與單個數(shù)據(jù)源配置不同點在于,spring.datasource之后多了一個數(shù)據(jù)源名稱primary/secondary用來區(qū)分不同的數(shù)據(jù)源;

初始化數(shù)據(jù)源

新建一個配置類,用來加載多個數(shù)據(jù)源完成初始化。

@Configuration
public class DataSourceConfiguration {
    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }
}

通過@ConfigurationProperties就可以知道這兩個數(shù)據(jù)源分別加載了spring.datasource.primary.*和spring.datasource.secondary.*的配置。@Primary注解指定了主數(shù)據(jù)源,當(dāng)不指定數(shù)據(jù)源時,就會使用該主數(shù)據(jù)源。

mybatis配置

@Configuration
@MapperScan(
        basePackages = "com*.primary",
        sqlSessionFactoryRef = "sqlSessionFactoryPrimary",
        sqlSessionTemplateRef = "sqlSessionTemplatePrimary")
public class PrimaryConfig {
    private DataSource primaryDataSource;
    public PrimaryConfig(@Qualifier("primaryDataSource") DataSource primaryDataSource) {
        this.primaryDataSource = primaryDataSource;
    }
    @Bean
    public SqlSessionFactory sqlSessionFactoryPrimary() throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(primaryDataSource);
        return bean.getObject();
    }
    @Bean
    public SqlSessionTemplate sqlSessionTemplatePrimary() throws Exception {
        return new SqlSessionTemplate(sqlSessionFactoryPrimary());
    }
}
@Configuration
@MapperScan(
        basePackages = "com.*.secondary",
        sqlSessionFactoryRef = "sqlSessionFactorySecondary",
        sqlSessionTemplateRef = "sqlSessionTemplateSecondary")
public class SecondaryConfig {
    private DataSource secondaryDataSource;
    public SecondaryConfig(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
        this.secondaryDataSource = secondaryDataSource;
    }
    @Bean
    public SqlSessionFactory sqlSessionFactorySecondary() throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(secondaryDataSource);
        return bean.getObject();
    }
    @Bean
    public SqlSessionTemplate sqlSessionTemplateSecondary() throws Exception {
        return new SqlSessionTemplate(sqlSessionFactorySecondary());
    }
}

配置類上使用@MapperScan注解來指定當(dāng)前數(shù)據(jù)源下定義的實體和mapper的包路徑,還注入了sqlSessionFactory和sqlSessionTemplate,通過@Qualifier注解指定了對應(yīng)的數(shù)據(jù)源,其名字對應(yīng)在DataSourceConfiguration配置類中的數(shù)據(jù)源定義的函數(shù)名。

各個對數(shù)據(jù)源對應(yīng)路徑下的實體和mapper

@Data
@NoArgsConstructor
public class UserPrimary {
    private Long id;
    private String user_name;
    private Integer age;
    public UserPrimary(String name, Integer age) {
        this.user_name = name;
        this.age = age;
    }
}
public interface UserMapperPrimary {
    @Select("SELECT * FROM USER_0 WHERE USER_NAME = #{name}")
    UserPrimary findByName(@Param("name") String name);
    @Insert("INSERT INTO USER_0 (USER_NAME, AGE) VALUES(#{name}, #{age})")
    int insert(@Param("name") String name, @Param("age") Integer age);
    @Delete("DELETE FROM USER_0")
    int deleteAll();
}
@Data
@NoArgsConstructor
public class UserSecondary {
    private Long id;
    private String user_name;
    private Integer age;
    public UserSecondary(String name, Integer age) {
        this.user_name = name;
        this.age = age;
    }
}
public interface UserMapperSecondary {
    @Select("SELECT * FROM USER_1 WHERE USER_NAME = #{name}")
    UserSecondary findByName(@Param("name") String name);
    @Insert("INSERT INTO USER_1 (USER_NAME, AGE) VALUES(#{name}, #{age})")
    int insert(@Param("name") String name, @Param("age") Integer age);
    @Delete("DELETE FROM USER_1")
    int deleteAll();
}

測試

	@Test
    public void test() {
        // 往Primary數(shù)據(jù)源插入一條數(shù)據(jù)
        userMapperPrimary.insert("caocao", 20);
        // 從Primary數(shù)據(jù)源查詢剛才插入的數(shù)據(jù),配置正確就可以查詢到
        UserPrimary userPrimary = userMapperPrimary.findByName("caocao");
        Assert.assertEquals(20, userPrimary.getAge().intValue());
        // 從Secondary數(shù)據(jù)源查詢剛才插入的數(shù)據(jù),配置正確應(yīng)該是查詢不到的
        UserSecondary userSecondary = userMapperSecondary.findByName("caocao");
        Assert.assertNull(userSecondary);
        // 往Secondary數(shù)據(jù)源插入一條數(shù)據(jù)
        userMapperSecondary.insert("sunquan", 21);
        // 從Primary數(shù)據(jù)源查詢剛才插入的數(shù)據(jù),配置正確應(yīng)該是查詢不到的
        userPrimary = userMapperPrimary.findByName("sunquan");
        Assert.assertNull(userPrimary);
        // 從Secondary數(shù)據(jù)源查詢剛才插入的數(shù)據(jù),配置正確就可以查詢到
        userSecondary = userMapperSecondary.findByName("sunquan");
        Assert.assertEquals(21, userSecondary.getAge().intValue());
    }

到此這篇關(guān)于Springboot集成mybatis實現(xiàn)多數(shù)據(jù)源配置詳解流程的文章就介紹到這了,更多相關(guān)Springboot多數(shù)據(jù)源配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用注解開發(fā)SpringMVC詳細配置教程

    使用注解開發(fā)SpringMVC詳細配置教程

    這篇文章主要介紹了使用注解開發(fā)SpringMVC詳細配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java?20在Windows11系統(tǒng)下的簡易安裝教程

    Java?20在Windows11系統(tǒng)下的簡易安裝教程

    這篇文章主要給大家介紹了關(guān)于Java?20在Windows11系統(tǒng)下的簡易安裝教程,學(xué)習(xí)Java的同學(xué),第一步就是安裝好Java環(huán)境,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Java中byte、byte數(shù)組與int、long的轉(zhuǎn)換詳解

    Java中byte、byte數(shù)組與int、long的轉(zhuǎn)換詳解

    這篇文章分別給大家介紹了Java中byte和int之間的轉(zhuǎn)換、Java中 byte數(shù)組和int之間的轉(zhuǎn)換、Java中byte數(shù)組和long之間的轉(zhuǎn)換以及整理了整體工具類的源碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Hibernate持久化對象生命周期原理解析

    Hibernate持久化對象生命周期原理解析

    這篇文章主要介紹了Hibernate持久化對象生命周期原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 如何自定義springboot-starter日志組件供各個服務(wù)使用(系統(tǒng)日志優(yōu)化)

    如何自定義springboot-starter日志組件供各個服務(wù)使用(系統(tǒng)日志優(yōu)化)

    文章介紹了如何將各個微服務(wù)的接口調(diào)用日志邏輯優(yōu)化為一個可共享的Spring Boot Starter,通過自定義注解和自動裝配機制實現(xiàn),本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • java中stringbuffer線程安全分析實例詳解

    java中stringbuffer線程安全分析實例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于java中stringbuffer線程安全分析實例詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • Java串口通信入門

    Java串口通信入門

    串口通信是一種用于在計算機和外部設(shè)備之間進行數(shù)據(jù)交換的通信方式,本文主要介紹了Java串口通信入門,并提供一個簡單的示例來演示如何在Java中進行串口通信,感興趣的可以了解一下
    2023-11-11
  • Java 向上轉(zhuǎn)型和向下轉(zhuǎn)型的詳解

    Java 向上轉(zhuǎn)型和向下轉(zhuǎn)型的詳解

    這篇文章主要介紹了 Java 向上轉(zhuǎn)型和向下轉(zhuǎn)型的詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 基于java實現(xiàn)畫圖板功能

    基于java實現(xiàn)畫圖板功能

    這篇文章主要為大家詳細介紹了基于java實現(xiàn)畫圖板功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java實現(xiàn)經(jīng)典拳皇誤闖冒險島游戲的示例代碼

    Java實現(xiàn)經(jīng)典拳皇誤闖冒險島游戲的示例代碼

    《拳皇誤闖冒險島》是拳皇和冒險島素材的基于JavaSwing的動作類游戲。本文將用Java語言實現(xiàn)這一游戲,需要的小伙伴可以參考一下
    2022-02-02

最新評論

嵊泗县| 阜平县| 辛集市| 长白| 平武县| 定结县| 尼木县| 江门市| 古田县| 鄂温| 沂水县| 柯坪县| 监利县| 东乌| 九江市| 辽宁省| 双辽市| 渭源县| 柘城县| 同心县| 固始县| 嵩明县| 鸡西市| 河南省| 读书| 福安市| 谢通门县| 长汀县| 武功县| 静宁县| 浦东新区| 蓬溪县| 弥勒县| 贵溪市| 安丘市| 会同县| 花垣县| 社旗县| 莱西市| 海丰县| 信阳市|