1:主要代码片段
1.1:主数据源配置类
@Configuration
@MapperScan(basePackages = "com.zero.bs.dao.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryConfig {
@Bean(name = "primaryDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource getDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primarySqlSessionFactory")
@Primary
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
//指定mapper映射文件的路径
bean.setMapperLocations(
new
PathMatchingResourcePatternResolver().getResources("classpath*:mapperXml/primary/*.xml"));
return bean.getObject();
}
}
1.2:从数据源配置类
@Configuration
@MapperScan(basePackages = "com.zero.bs.dao.secondary", sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryConfig {
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource getDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapperXml/secondary/*.xml"));
return bean.getObject();
}
@Bean(name = "secondaryTransactionManager")
public DataSourceTransactionManager orderTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
1.3 dao层创建
2:代码详解
1:@Configuration--作用于类上,表示该类是一个配置类。是spring中XML配置文件的另一种表现形式,两者可以平替。
2:@MapperScan--指定要变成实现类的接口所在的包,包下面的所有接口在编译之后都会生成相应的实现类。(让dao层的接口生成实体类对象,并关联sqsessionfactory工厂)---->解释一下这个factory,它是一个镜像实例,每一个数据库一般来说对应唯一一个。作用是用来创建sqlsession,sqlsession类似于JDBC中的Connection.它是应用程序与持久层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象.SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句.每个线程都应该有它自己的SqlSession实例.
3:@Primary--表明该数据源是主数据源(面对同样类型的bean,自动注入的时候防止出现错误)
4:@ConfigurationProperties--会将对应前缀的后面的属性与Bean对象的属性匹配。符合条件则进行赋值。
5:@Qualifier--解决注入依赖冲突的问题,其实就是可以根据名称来选择bean来进行注入,可以对比@Primary注解来进行对比记忆。
3:总结
其实主要就是在通过配置类的形式指明了有两个或多个数据源,并指明两个或多个数据源所对应的dao层。然后dao层中的接口再生成了实体类并关联了sql语句之后,该语句再被加载的时候就会自动去匹配自己所对应的数据源。从而达到不同的sql语句面向的数据源也不一样的目的(多数据源类似,不过是重新添加配置类即可。)