项目中需要访问两个数据库,自然就得使用多数据源了,采用的mybatis,所以就基于mybatis来搞吧,网上教程什么的乱七八糟,上来先贴一大段没有用的代码,能不能只贴关键点?最后还是找到纯洁的微笑大佬的博客来研究的,简直就是我java启蒙老师。先感谢加膜拜下。码云上也有代码地址,拿下来可以直接跑起来。大部分网上搞的代码,搞下来先解决一堆错误,简直吐血。
参考地址:https://www.cnblogs.com/ityouknow/p/6102399.html
1、首先我项目的结构
2、其实重点在于MysqlConfig和SqlserverConfig文件,然后就是mapper用包分开即可,贴代码看下。
package com.example.multidata.datasource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.example.multidata.mappers.mysql", sqlSessionTemplateRef = "mysqlSqlSessionTemplate")
public class MysqlConfig {
//将这个对象放入Spring容器中
@Bean(name = "mysqlDataSource")
//表示这个数据源是默认数据源
@Primary
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource getMysqlDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "mysqlSqlSessionFactory")
// 表示这个数据源是默认数据源
@Primary
//@Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource datasource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
return bean.getObject();
}
@Bean("mysqlSqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
==========================================
package com.example.multidata.datasource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.example.multidata.mappers.sqlserver", sqlSessionTemplateRef = "sqlserverSqlSessionTemplate")
public class SqlserverConfig {
//将这个对象放入Spring容器中
@Bean(name = "sqlserverDataSource")
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.sqlserver")
public DataSource getSqlserverDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlserverSqlSessionFactory")
//@Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory sqlserverSqlSessionFactory(@Qualifier("sqlserverDataSource") DataSource datasource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
return bean.getObject();
}
@Bean("sqlserverSqlSessionTemplate")
public SqlSessionTemplate test1sqlsessiontemplate(@Qualifier("sqlserverSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
总结我犯的错:名称一定仔细检查,不能搞错误了,不然报错,代码不多,检查起来也不难。另外pom千万别忘记添加数据的驱动,我就少添加一个驱动,报错。其余没什么,代码可以直接拿去用。
其余代码不贴了,代码放在码云上想看其他看源码吧。
https://gitee.com/awith/multidata.git
转载于:https://my.oschina.net/uwith/blog/3049905