多文件配置
添加mybatis配置
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
项目目录如下:
配置.yml文件,这里添加了两个数据库的配置datatest和datatest2
#以下的配置是个人经过两次错误后修改的
#详细错误会在后面展示
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/datatest?serverTimezone=GMT%2B8
username: root
password: root
slaver:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/datatest2?serverTimezone=GMT%2B8
username: root
password: root
创建数据库的实体类Book,测试方法而已,两个数据库表内容一样就创建了一个实体类
public class Book{
private int id;
private String author;
private String name;
//get set代码省略
}
创建MasterDataSourceConfiguration和SlaverDataSourceConfiguration两个类代码如下
package com.example.demo.config;
import com.alibaba.druid.pool.DruidDataSource;
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.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper.master", sqlSessionTemplateRef = "masterSqlSessionTemplate")
public class MasterDataSourceConfiguration {
//##master修改为slaver
@Value("${spring.datasource.master.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.master.url}")
private String url;
@Value("${spring.datasource.master.username}")
private String username;
@Value("${spring.datasource.master.password}")
private String password;
@Bean(name = "masterDataSource")
@Primary
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(this.driverClassName);
dataSource.setUrl(this.url);
dataSource.setUsername(this.username);
dataSource.setPassword(this.password);
return dataSource;
}
@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//##修改地址
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/master/*.xml"));
return bean.getObject();
}
@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "masterSqlSessionTemplate")
@Primary
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
SlaverDataSourceConfiguration类基本相同,需要修改的我已经标注##
public interface BookMapperTest1 {
List<Book> getAllBooks();
}
public interface BookMapperTest2 {
List<Book> getAllBooks();
}
创建两个接口
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTO Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.master.BookMapperTest1">
<select id="getAllBooks" resultType="com.example.demo.entity.Book">
select * from book
</select>
</mapper>
=========================分割线,此处为创建两个文件==============================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTO Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.slaver.BookMapperTest2">
<select id="getAllBooks" resultType="com.example.demo.entity.Book">
select * from book
</select>
</mapper>
最后创建Controller,简单起见,这里直接将Mapper注入到Mapper中
@RestController
@RequestMapping("book/")
public class BookController {
@Resource
BookMapperTest1 bookMapperTest1;
@Resource
BookMapperTest2 bookMapperTest2;
@RequestMapping("test")
public ModelAndView test(){
ModelAndView modelAndView = new ModelAndView();
List<Book> list1 = bookMapperTest1.getAllBooks();
List<Book> list2 = bookMapperTest2.getAllBooks();
modelAndView.addObject("list1",list1);
modelAndView.addObject("list2",list2);
modelAndView.setViewName("books");
return modelAndView;
}
}
返回的是一个ModelAndView这里创建一下books.html文件,代码如下
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>图书编号</td>
<td>图书名称</td>
<td>图书作者</td>
</tr>
<tr th:each="book:${list1}">
<td th:text="${book.id}"></td>
<td th:text="${book.author}"></td>
<td th:text="${book.name}"></td>
</tr>
<tr th:each="book:${list2}">
<td th:text="${book.id}"></td>
<td th:text="${book.author}"></td>
<td th:text="${book.name}"></td>
</tr>
</table>
</body>
</html>
下面我们就可以启动项目了,我们访问一下https://localhost:8808/book/test
两个数据库中的内容已经显示了
================分割线=================================
下面是小编在学习的时候遇到的问题,在此总结一下,看看有没有和小编出现相同问题的
1.
Exception in thread "main" java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
这是在使用MySQL 8.0以上版本(MySQL连接驱动和版本都是8.0以上)的时候出现的问题错误,我们需要在访问数据库的Url后面加上以下的语句即可:?serverTimezone=GMT%2B8
改成
jdbc:mysql://localhost:3306/datatest?serverTimezone=GMT%2B8
2.
处理:提示信息表明数据库驱动com.mysql.jdbc.Driver'已经被弃用了、应当使用新的驱动com.mysql.cj.jdbc.Driver'
所以,按照提示更改jdbc.properties配置 .com.mysql.jdbc.Driver 改为 com.mysql.cj.jdbc.Driver(前面小编已经修改过了)
这个问题的文章链接https://blog.csdn.net/weixin_42323802/article/details/82500458
好了,spring boot对mybatis配置多数据源就到这了(卍)