应用场景:
针对于一些项目,开始使用的JPA来操作数据库,但由于JPA对多表关联查询不是很友好。这时候MyBatis就登场了,话不多说,下面是正文
demo实现:
- pom文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
- 配置文件 多数据源配置
spring.datasource.jpa.url=jdbc:mysql://127.0.0.1:3306/jpa_mybatis?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
spring.datasource.jpa.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.jpa.username=root
spring.datasource.jpa.password=
spring.datasource.jpa.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.mybatis.url=jdbc:mysql://127.0.0.1:3306/jpa_mybatis?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
spring.datasource.mybatis.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.mybatis.username=root
spring.datasource.mybatis.password=
spring.datasource.mybatis.type=com.alibaba.druid.pool.DruidDataSource
spring.jpa.hibernate.ddl-auto=update
- 数据源注入 MyBatis数据源配置注入
package com.zebra.jpa_mybatis.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import javax.sql.DataSource;
/**
* @author Zebra_LMW
* @date 31/8/2020下午 2:58
*/
@Configuration
@Order(1)
public class DataSourceConfig {
@ConfigurationProperties(prefix = "spring.datasource.jpa")
@Bean("jpaDatasource")
@Primary //该注解表明该数据源是项目默认使用的
public DataSource jpaDatasource(){
return new DruidDataSource();
}
@ConfigurationProperties(prefix = "spring.datasource.mybatis")
@Bean("mybatisDatasource")
public DataSource mybatisDatasource(){
return new DruidDataSource();
}
}
package com.zebra.jpa_mybatis.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
/**
* MyBatis配置类
* Created by macro on 2019/4/8.
*/
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = "com.zebra.jpa_mybatis.mapper", sqlSessionFactoryRef = "myBatisSqlSessionFactory")// basePackages mapper所在的包名
@Order(2)
public class MyBatisConfig {
@Bean(name = "myBatisSqlSessionFactory")
public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("mybatisDatasource")DataSource mybatisDatasource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(mybatisDatasource);
org.springframework.core.io.Resource[] resources = new PathMatchingResourcePatternResolver()
.getResources("classpath:mappers/*.xml");
sessionFactory.setMapperLocations(resources);
return sessionFactory.getObject();
}
}
以上就是多数据源的配置信息 具体代码gitee地址