核心思路:
通过MapperScan注解直接指定每套数据库各自扫描的mapper所在包路径
最终的代码目录结构如下:
参考前一篇博客-
Spring Boot 05-集成mybatis
需要做如下修改:
pom.xml
把spring boot的版本从2.0.2,换成1.5.9
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
TesterMan.java
注释掉@MapperScan这一行:
@SpringBootApplication(scanBasePackages={"my.demo.**"})
//@MapperScan("my.demo.mapper.**")
public class TesterMan{
public static void main(String[] args) {
SpringApplication.run(TesterMan.class,args);
}
}
db访问相关的包路径以及需要的类:
Db1MybatisConfig.java
package my.demo.dao.db1.config;
import javax.sql.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.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan(basePackages = { "my.demo.dao.db1.mapper.**" },
sqlSessionFactoryRef="db1flowSessionFactory")
public class Db1MybatisConfig {
@Bean(name = "db1")
@ConfigurationProperties(prefix = "mysql.db1")
public DataSource db1flowDatasource() {
return DataSourceBuilder.create().build();
}
@Bean(name="db1SessionFactory")
public SqlSessionFactory db1flowSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(db1flowDatasource());
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate db1flowSessionTemplate() throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(
db1flowSessionFactory());
return template;
}
}
Db1DemoMapper.java
package my.demo.dao.db1.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
public interface Db1DemoMapper {
@Select("select * from Demo where name = #{name}")
public List likeName(String name);
@Select("select * from Demo where id = #{id}")
public Db1DemoMapper getById(long id);
@Select("select name from Demo where id = #{id}")
public String getNameById(long id);
}
application.properties变成如下这样:
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.url=jdbc:mysql://ip:port/dbname
#spring.datasource.username=username
#spring.datasource.password=password
####mysql.db1
mysql.db1.type=com.alibaba.druid.pool.DruidDataSource
mysql.db1.driver-class-name=com.mysql.jdbc.Driver
mysql.db1.url = jdbc:mysql://ip:port/db1?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
mysql.db1.username = username
mysql.db1.password = password
####mysql.db2
mysql.db2.type=com.alibaba.druid.pool.DruidDataSource
mysql.db2.driver-class-name=com.mysql.jdbc.Driver
mysql.db2.url = jdbc:mysql://ip:port/db2?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
mysql.db2.username = username
mysql.db2.password = password