【附源码】Spring Boot实战系列——一、配置内存数据库H2
【附源码】Spring Boot实战系列——二、配置多个数据源(H2数据库)
【附源码】Spring Boot实战系列——三、配置多个数据源(Mysql数据库)
【附源码】Spring Boot实战系列——四、日志管理
【附源码】Spring Boot实战系列——五、事务抽象
【附源码】Spring Boot实战系列——六、货币存数据库的处理
引入Mysql依赖
- Mysql驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
- mybatis持久层框架
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
代码结构
数据源db1配置文件
Db1Config.java
@Slf4j
@Configuration
@MapperScan(basePackages = "com.qiuyi.springdemo.dao.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Db1Config {
@Value("${spring.datasource.db1.jdbc-url}")
private String db1JdbcUrl;
/**
* 是application.properties中的spring.datasource.db1配置生效
* @return
*/
@Bean(name = "db1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.db1")
@Primary
public DataSource db1DataSource() {
log.info(db1JdbcUrl);
return DataSourceBuilder.create().build();
}
/**
* 事务管理器,在实例化时注入主库db1
* @param dataSource
* @return
*/
@Bean(name = "db1TransactionManager")
@Primary
public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 将配置信息注入到SqlSessionFactoryBean中
* @param dataSource 数据库连接信息
* @return
* @throws Exception
*/
@Bean(name = "db1SqlSessionFactory")
@Primary
public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml"));
// 数据库字段映射到类字段,下划线风格转驼峰风格
Objects.requireNonNull(bean.getObject()).getConfiguration().setMapUnderscoreToCamelCase(true);
return bean.getObject();
}
/**
* SqlSessionTemplate具有线程安全性
* @param sqlSessionFactory
* @return
* @throws Exception
*/
@Bean(name = "db1SqlSessionTemplate")
@Primary
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
数据源db2配置文件类似,看源码。
数据访问层
dao/db1/NewsDao.java
- 通过注解
- 通过xml
@Repository
@Mapper
public interface NewsDao {
@Select("select * from news")
List<News> getAllNews();
List<News> queryNewsAll();
}
xml的写法
resources/mapper/db1/NewsDao.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qiuyi.springdemo.dao.db1.NewsDao">
<!--查询所有资讯信息-->
<select id="queryNewsAll" resultType="com.qiuyi.springdemo.model.News">
SELECT * FROM `news`
</select>
</mapper>
开启sql语句打印
logging.level.com.qiuyi.springdemo.dao.*=DEBUG