您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“spring boot中mybatis多數(shù)據(jù)源的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“spring boot中mybatis多數(shù)據(jù)源的示例分析”這篇文章吧。
在我們的項目中不免會遇到需要在一個項目中使用多個數(shù)據(jù)源的問題,像我在得到一個任務(wù)將用戶的聊天記錄進(jìn)行遷移的時候,就是用到了三個數(shù)據(jù)源,當(dāng)時使用的AOP的編程方式根據(jù)訪問的方法的不同進(jìn)行動態(tài)的切換數(shù)據(jù)源,覺得性能不太好,先在又新用到了一種使用方式,覺得不錯,記錄下來。
介紹一下DEMO項目,使用的spring boot集成mybatis,mybatis查詢數(shù)據(jù)庫是基于注解形式查詢的,目的查詢兩個數(shù)據(jù)庫test1和test2的用戶信息,并在控制臺打印。
1.pom文件
<dependencies> <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.1.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>5.1.27</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include> **/*.xml </include> </includes> </resource> <resource> <directory>src/resources</directory> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
其中添加了alibaba的druid的數(shù)據(jù)源代替了spring boot默認(rèn)的hikacp,注意mysql的驅(qū)動的版本號要與自己所使用的mysql的版本號保持一致,其中build模塊里面的resources里面是為了防止spring boot 過濾掉src/main/java的XML文件,畢竟有的人喜歡mybatsi查詢數(shù)據(jù)庫的時候使用的是XML映射文件,不過我們本次使用的 是注解的形式 ,所以<resources>里面的內(nèi)容在項目中沒有用到。如果直接使用注解,可以忽略該內(nèi)容。
2.用戶類
public class User { public Integer id; public String name; public String address; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", address='" + address + '\'' + '}'; } //get set方法省略........... }
用戶類沒有什么好說的,就是基本的幾個屬性。
3.application.properties文件配置
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.one.username=root spring.datasource.one.password=123456 spring.datasource.one.url=jdbc:mysql://localhost:3306/test1 spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.two.username=root spring.datasource.two.password=123456 spring.datasource.two.url=jdbc:mysql://localhost:3306/test2
這里主要配置了兩個數(shù)據(jù)庫的訪問屬性,注意兩個的區(qū)別為one何two的前綴不同,方便在下面使用spring boot的類安全屬性的方式創(chuàng)建不同的數(shù)據(jù)源。
4.根據(jù)不同的前綴創(chuàng)建不同的數(shù)據(jù)源
@Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.one") public DataSource dsOne(){ return DruidDataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.two") public DataSource dsTwo(){ return DruidDataSourceBuilder.create().build(); } }
該類位于主目錄的config目錄下面,使用@ConfigurationProperties注解表明對應(yīng)的DataSource創(chuàng)建的時候使用的配置文件的內(nèi)容。
5.在主目錄下面分別創(chuàng)建mapper1和mapper2包,在對應(yīng)的包下面創(chuàng)建對應(yīng)的數(shù)據(jù)層訪問接口UserMapper1和UserMapper2,內(nèi)容都如下所示
@Mapper public interface UserMapper1 { @Select("select * from users") List<User> getAllUser(); }
這接口里面沒有什么好說的就是一個簡單的mytatis的基于注解的查詢所有用戶的接口。
6.在config包下面創(chuàng)建不同的配置類MybatisConfigOne和MybatisConfigTwo兩個類分別對應(yīng)去掃描mapper1和mapper2兩個路徑下面的dao層接口。
@Configuration @MapperScan(basePackages = "com.hopec.mybatis.mapper1",sqlSessionFactoryRef = "sqlSessionFactory1", sqlSessionTemplateRef = "sqlSessionTemplate1") public class MybatisConfigOne { @Autowired @Qualifier("dsOne") DataSource ds1; @Bean SqlSessionFactory sqlSessionFactory1(){ SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(ds1); try { return bean.getObject(); } catch (Exception e) { e.printStackTrace(); } return null; } @Bean SqlSessionTemplate sqlSessionTemplate1(){ return new SqlSessionTemplate(sqlSessionFactory1()); } }
public class MybatisConfigTwo { @Autowired @Qualifier("dsTwo") DataSource ds2; @Bean SqlSessionFactory sqlSessionFactory2(){ SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(ds2); try { return bean.getObject(); } catch (Exception e) { e.printStackTrace(); } return null; } @Bean SqlSessionTemplate sqlSessionTemplate2(){ return new SqlSessionTemplate(sqlSessionFactory2()); } }
7.測試
@SpringBootTest class MybatisApplicationTests { @Autowired UserMapper1 userMapper1; @Autowired UserMapper2 userMapper2; @Test void contextLoads() { List<User> users = userMapper1.getAllUser(); System.out.println(users); List<User> allUser = userMapper2.getAllUser(); System.out.println(allUser); } }
測試結(jié)果:
以上是“spring boot中mybatis多數(shù)據(jù)源的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。