spring boot 整合mybatis单数据配置和多数据配置

多文件配置

添加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配置多数据源就到这了(卍)

猜你喜欢

转载自blog.csdn.net/qq_41426326/article/details/88547003