Spring Boot+MyBatis是现在项目中很常见的配置。使用MyBatis连接单个数据库也很简单,连接多个数据库会稍微复杂一些。下面以连接MySQL数据库为例,介绍一下具体的配置。这里Spring Boot的版本是2.5.4。
1 配置pom文件,增加MyBatis starter和连接MySQL需要的jar包。
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
2 配置单个数据库连接
@Configuration@MapperScan(basePackages="com.example.mapper",sqlSessionTemplateRef="sqlSessionTemplate")public class DatabaseConfig {@Bean@ConfigurationProperties(prefix = "test.datasource")public DataSource dataSource() {return DataSourceBuilder.create().build();}@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource)throws Exception {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);return sessionFactory.getObject();}@Beanpublic SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}}
使用@ConfigurationProperties(prefix = "test.datasource")可以直接从application.xml中读取数据库的配置信息。
application.xml文件中的数据库配置信息如下:
test1.datasource.jdbc-url=jdbc:mysql://192.168.0.100:3306/test?characterEncoding=utf-8test1.datasource.username=testtest1.datasource.password=testtest1.datasource.driverClassName=com.mysql.cj.jdbc.Drivertest1.datasource.test-on-borrow=truetest1.datasource.validation-query=SELECT 1
需要注意的是,如果是Spring Boot 1.X的版本,如下所示有两处配置是和2.X版本是不同的。
// 1.X 版本配置的url名称是 datasource.url 2.X是 datasource.jdbc-urltest.datasource.url=jdbc:mysql://10.10.10.10:3306/testdb?characterEncoding=utf-8test.datasource.username=testtest.datasource.password=test// 1.X 版本推荐的mysql驱动时 com.mysql.jdbc.Drivertest.datasource.driverClassName=com.mysql.jdbc.Drivertest.datasource.test-on-borrow=truetest.datasource.validation-query=SELECT 1
3 配置多个数据库的连接。首先配置第一个数据库。
@Configuration@MapperScan(basePackages="com.example.mapper",sqlSessionTemplateRef="sqlSessionTemplate")public class FirstDatabaseConfig {@Bean@Primary@ConfigurationProperties(prefix = "test1.datasource")public DataSource dataSource() {return DataSourceBuilder.create().build();}@Bean@Primarypublic SqlSessionFactory sqlSessionFactory(DataSource dataSource)throws Exception {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);return sessionFactory.getObject();}@Bean@Primarypublic SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}}
需要注意的是,如果多个数据库,需要指定一个数据库为首选数据库,用@Primary注解标注出来。在创建DataSource,SqlSessionFactory,SqlSessionTemplate时都需要标注出来。
另外如果不特别用 @Bean的name属性写明bean的变量名的话,bean的默认变量名为创建bean的方法名,例如上文DataSource的实例的变量名为dataSource。
然后配置第二个数据库
@Configuration@MapperScan(basePackages="com.example.mapper2",sqlSessionTemplateRef="secondSqlSessionTemplate")public class SecondDatabaseConfig {@Bean@ConfigurationProperties(prefix = "test2.datasource")public DataSource secondDataSource() {return DataSourceBuilder.create().build();}@Beanpublic SqlSessionFactory secondSqlSessionFactory(@Qualifier("secondDataSource") DataSource dataSource)throws Exception {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);return sessionFactory.getObject();}@Beanpublic SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("secondSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}}
在创建第二个数据库时,需要注意的是要使用@Qualifier注解来说明要注入的实例的变量名是什么。如果不用@Qualifier注解,会注入首选实例,即用@Primary注解标明的实例。
另外如果项目需要配置两个数据库,@MapperScan也需要分别配置,要配置两个不同的扫描路径。
文章转载自码上记录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




