Mybatis多數據源配置

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

相關文章
相關標籤/搜索