這篇文章主要為大家展示了“spring boot中mybatis多數(shù)據(jù)源的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“spring boot中mybatis多數(shù)據(jù)源的示例分析”這篇文章吧。
創(chuàng)新互聯(lián)公司是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專(zhuān)注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開(kāi)發(fā),軟件開(kāi)發(fā),小程序開(kāi)發(fā),10年建站對(duì)成都格柵板等多個(gè)行業(yè),擁有豐富設(shè)計(jì)經(jīng)驗(yàn)。
在我們的項(xiàng)目中不免會(huì)遇到需要在一個(gè)項(xiàng)目中使用多個(gè)數(shù)據(jù)源的問(wèn)題,像我在得到一個(gè)任務(wù)將用戶的聊天記錄進(jìn)行遷移的時(shí)候,就是用到了三個(gè)數(shù)據(jù)源,當(dāng)時(shí)使用的AOP的編程方式根據(jù)訪問(wèn)的方法的不同進(jìn)行動(dòng)態(tài)的切換數(shù)據(jù)源,覺(jué)得性能不太好,先在又新用到了一種使用方式,覺(jué)得不錯(cuò),記錄下來(lái)。
介紹一下DEMO項(xiàng)目,使用的spring boot集成mybatis,mybatis查詢(xún)數(shù)據(jù)庫(kù)是基于注解形式查詢(xún)的,目的查詢(xún)兩個(gè)數(shù)據(jù)庫(kù)test1和test2的用戶信息,并在控制臺(tái)打印。
1.pom文件
org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.1 com.alibaba druid-spring-boot-starter 1.1.10 MySQL mysql-connector-java runtime 5.1.27 org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine src/main/java **/*.xml src/resources org.springframework.boot spring-boot-maven-plugin
其中添加了alibaba的druid的數(shù)據(jù)源代替了spring boot默認(rèn)的hikacp,注意mysql的驅(qū)動(dòng)的版本號(hào)要與自己所使用的mysql的版本號(hào)保持一致,其中build模塊里面的resources里面是為了防止spring boot 過(guò)濾掉src/main/java的XML文件,畢竟有的人喜歡mybatsi查詢(xún)數(shù)據(jù)庫(kù)的時(shí)候使用的是XML映射文件,不過(guò)我們本次使用的 是注解的形式 ,所以
2.用戶類(lèi)
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方法省略........... }
用戶類(lèi)沒(méi)有什么好說(shuō)的,就是基本的幾個(gè)屬性。
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
這里主要配置了兩個(gè)數(shù)據(jù)庫(kù)的訪問(wèn)屬性,注意兩個(gè)的區(qū)別為one何two的前綴不同,方便在下面使用spring boot的類(lèi)安全屬性的方式創(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(); } }
該類(lèi)位于主目錄的config目錄下面,使用@ConfigurationProperties注解表明對(duì)應(yīng)的DataSource創(chuàng)建的時(shí)候使用的配置文件的內(nèi)容。
5.在主目錄下面分別創(chuàng)建mapper1和mapper2包,在對(duì)應(yīng)的包下面創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)層訪問(wèn)接口UserMapper1和UserMapper2,內(nèi)容都如下所示
@Mapper public interface UserMapper1 { @Select("select * from users") ListgetAllUser(); }
這接口里面沒(méi)有什么好說(shuō)的就是一個(gè)簡(jiǎn)單的mytatis的基于注解的查詢(xún)所有用戶的接口。
6.在config包下面創(chuàng)建不同的配置類(lèi)MybatisConfigOne和MybatisConfigTwo兩個(gè)類(lèi)分別對(duì)應(yīng)去掃描mapper1和mapper2兩個(gè)路徑下面的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.測(cè)試
@SpringBootTest class MybatisApplicationTests { @Autowired UserMapper1 userMapper1; @Autowired UserMapper2 userMapper2; @Test void contextLoads() { Listusers = userMapper1.getAllUser(); System.out.println(users); List allUser = userMapper2.getAllUser(); System.out.println(allUser); } }
測(cè)試結(jié)果:
以上是“spring boot中mybatis多數(shù)據(jù)源的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!