1.application.properties文件配置配合數據源mysql
spring.datasource.query1.jdbc-url=jdbc:mysql://192.168.0.112:3306/secms_ods?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.query1.username=root spring.datasource.query1.password= spring.datasource.query1.driver-class-name=com.mysql.jdbc.Driver spring.datasource.query2.jdbc-url=jdbc:mysql://192.168.0.112:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.query2.username=root spring.datasource.query2.password= spring.datasource.query2.driver-class-name=com.mysql.jdbc.Driver mybatis.config-location=classpath:mybatis/mybatis-config.xml
2.數據源配置spring
@Configuration @MapperScan(basePackages="com.jiafeng.dao.query1",sqlSessionTemplateRef="query1SqlSessionTemplate") public class DataSource1Config { @Bean(name = "query1DataSource") //配置數據源名稱 @ConfigurationProperties(prefix = "spring.datasource.query1") //將配置文件中數據源配置信息注入到該數據源 @Primary //Primary能夠理解爲默認優先選擇,同時不能夠同時設置多個 public DataSource query1DataSource() { return DataSourceBuilder.create().build(); } @Bean(name="query1SqlSessionFactory") @Primary public SqlSessionFactory query1SqlSessionFactory(@Qualifier("query1DataSource")DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //數據源注入到mapper.xml文件 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/query1/*.xml")); return bean.getObject(); } @Bean(name="query1TransactionManager") @Primary public DataSourceTransactionManager query1TransactionManager(@Qualifier("query1DataSource")DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name="query1SqlSessionTemplate") @Primary public SqlSessionTemplate query1SqlSessionTemplate(@Qualifier("query1SqlSessionFactory")SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } }
一層一層注入,首先建立 DataSource,而後建立 SqlSessionFactory 再建立事務,最後包裝到 SqlSessionTemplate 中。其中須要指定分庫的 mapper 文件地址,以及分庫dao層代碼。sql
@MapperScan(basePackages="com.jiafeng.dao.query1",sqlSessionTemplateRef="query1SqlSessionTemplate")
配置掃描的dao層:com.jiafeng.dao.query1,並將dao層注入到query1SqlSessionTemplate中。mybatis
第二個數據源配置app
@Configuration @MapperScan(basePackages="com.jiafeng.dao.query2",sqlSessionTemplateRef="query2SqlSessionTemplate") public class DataSource2Config { @Bean(name = "query2DataSource") @ConfigurationProperties(prefix = "spring.datasource.query2") public DataSource query1DataSource() { return DataSourceBuilder.create().build(); } @Bean(name="query2SqlSessionFactory") public SqlSessionFactory query1SqlSessionFactory(@Qualifier("query2DataSource")DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //數據源注入到mapper.xml文件 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/query2/*.xml")); return bean.getObject(); } @Bean(name="query2TransactionManager") public DataSourceTransactionManager query1TransactionManager(@Qualifier("query2DataSource")DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name="query2SqlSessionTemplate") public SqlSessionTemplate query1SqlSessionTemplate(@Qualifier("query2SqlSessionFactory")SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } }
3.dao層實現dom
package com.jiafeng.dao.query1; import com.jiafeng.domain.User; public interface SysUserMapper { User findUserByName(String userName); }
package com.jiafeng.dao.query2; import com.jiafeng.domain.Role; public interface RoleMapper { Role getRoleById(String id); }
mapper文件ui
<?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.jiafeng.dao.query1.SysUserMapper"> <resultMap id="result" type="com.jiafeng.domain.User"> <id property="id" column="user_id" /> <result property="userName" column="user_name" /> <result property="passWord" column="password" /> </resultMap> <select id="findUserByName" resultMap="result" parameterType="string"> SELECT user_id,user_name,`password` FROM `user` WHERE user_name=#{userName} </select> </mapper>
<?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.jiafeng.dao.query2.RoleMapper"> <resultMap id="result" type="com.jiafeng.domain.Role"> <id property="id" column="role_id" /> <result property="name" column="name" /> <result property="roleKey" column="role_key" /> </resultMap> <select id="getRoleById" resultMap="result" parameterType="string"> SELECT role_id,`name`,`role_key` FROM `role` WHERE role_id=#{id} </select> </mapper>
注意:dao 層和 xml 須要按照庫來分在不一樣的目錄,不一樣數據源按照配置不一樣的路徑進行注入。url