Spring Boot入门教程2-3、使用Spring Boot+MyBatis多数据源配置(注解版)

一、前言

  • 什么时候需要用到多数据源配置? 当你的项目需要访问多个数据库的时候
  • 本篇开发环境 1、操作系统: Windows 10 X64 2、Java SDK: jdk-8u141 3、Maven:3.5 4、IDE:IntelliJ IDEA 2017 5、Spring Boot:1.5.6

本项目构建基于:https://ken.io/note/springboot-course-basic-curd-annotation

二、多数据源配置

  • 创建数据库&表

1.1、手动创建数据库test 1.2:创建表:note

DROP TABLE IF EXISTS `note`;
CREATE TABLE `note` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `body` longtext,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
  • 修改数据库连接配置(application.yml)
#数据库连接配置
courseDataSource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/course?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root

testDataSource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root
  • 调整model

1、在io.ken.springboot.course.model下新建两个package:course、test 2、将User.java移动到io.ken.springboot.course.model.course 3、在io.ken.springboot.course.model.test下新建Note.java

package io.ken.springboot.course.model.test;

public class Note {

    private int id;

    private String title;

    private String body;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }
}
  • 调整dao

1、在io.ken.springboot.course.dao下新建两个package:course、test 2、将UserMapper.java移动到io.ken.springboot.course.dao.course 3、在io.ken.springboot.course.dao.test下新建NoteMapper.java

package io.ken.springboot.course.dao.test;

import io.ken.springboot.course.model.test.Note;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface NoteMapper {

    @Select("SELECT * FROM note")
    List<Note> queryAll();
}
  • 配置数据源

1、在io.ken.springboot.course下新建package:config 2、在io.ken.springboot.course.config下创建CourseDbConfig.java

package io.ken.springboot.course.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.boot.autoconfigure.jdbc.DataSourceBuilder;
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 javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "io.ken.springboot.course.dao.course", sqlSessionFactoryRef = "courseSqlSessionFactory")
public class CourseDbConfig {

    @Bean(name = "courseDataSource")
    @ConfigurationProperties(prefix = "courseDataSource")
    @Primary
    public DataSource courseDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "courseSqlSessionFactory")
    @Primary
    public SqlSessionFactory courseSqlSessionFactory(@Qualifier("courseDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

}

3、在io.ken.springboot.course.config下创建TestDbConfig.java

package io.ken.springboot.course.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.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "io.ken.springboot.course.dao.test", sqlSessionFactoryRef = "testSqlSessionFactory")
public class TestDbConfig {

    @Bean(name = "testDataSource")
    @ConfigurationProperties(prefix = "testDataSource")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "testSqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

}
  • 创建NoteController并提供API
package io.ken.springboot.course.controller;

import io.ken.springboot.course.dao.test.NoteMapper;
import io.ken.springboot.course.model.test.Note;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("/note")
public class NoteController {

    @Autowired
    NoteMapper noteMapper;

    @RequestMapping("/queryall")
    @ResponseBody
    List<Note> queryAll() {
        return noteMapper.queryAll();
    }
}
  • API测试

API

示例

添加用户

/user/add?name=tom&age=1&hobby=football

更新用户

/user/updatebyid?name=ken&age=18&hobby=coding&id=1

查询指定用户

/user/querybyid?id=1

查询所有用户

/user/queryall

删除指定用户

/user/delbyid?id=2

查询所有日志

/note/queryall

本文代码示例:https://github.com/ken-io/springboot-course/tree/master/chapter-02-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏battcn

一起来学SpringBoot | 第五篇:使用JdbcTemplate访问数据库

SpringFramework对数据库的操作在 JDBC上面做了深层次的封装,通过 依赖注入功能,可以将 DataSource 注册到 JdbcTemplate...

1121
来自专栏杨建荣的学习笔记

使用shell定制addm脚本(r3笔记第88天)

在10g开始推出的addm对于工作中的调优能够提供很多的帮助,而且建议也更加客观和全面。但是使用addmrpt.sql的时候还是有些慢, 可以使用如下的脚本来定...

2284
来自专栏Ken的杂谈

Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

本项目构建基于:https://ken.io/note/springboot-course-basic-helloworld

3163
来自专栏JavaNew

Spring Boot实战:数据库操作

43615
来自专栏数据之美

Hive 中内部表与外部表的区别与创建方法

先来说下Hive中内部表与外部表的区别: Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位...

2909
来自专栏Ken的杂谈

Spring Boot入门教程2-2、使用Spring Boot+MyBatis访问数据库(CURD)xml配置版

本项目构建基于:https://ken.io/note/springboot-course-basic-helloworld

1492
来自专栏用户2442861的专栏

Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码

  Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Inte...

6361
来自专栏大数据-Hadoop、Spark

Hive建表

关于Hive建表,参考官网: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+D...

2543
来自专栏乐沙弥的世界

PL/SQL Profiler 剖析报告生成html

    使用图形化界面工具实施PL/SQL Profiler 易用直观,但是并不是所有的环境都可以使用图形界面软件连接到数据库。对于只能在命令行下进行剖析又需要...

752
来自专栏Ken的杂谈

Spring Boot入门教程2-4、使用Spring Boot+MyBatis多数据源配置(xml配置版)

本项目构建基于:https://ken.io/note/springboot-course-basic-curd-xml

3402

扫码关注云+社区

领取腾讯云代金券