`
wx1569567608
  • 浏览: 71239 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

15.从零开始学springboot-mybatis-多数据源-xml方式

 
阅读更多

前言

上一章我们实现了springboot-mybatis-多数据源-annotations注解方式对mysql的操作访问,本章我们继续来实现 springboot-mybatis-多数据源-xml方式的案例。

创建空项目

1.png

添加依赖

         <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.0.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

2.png

添加配置

application.yml:

spring:
  datasource:
    master:
      username: root
      password: 123456
      jdbc-url: jdbc:mysql://192.168.145.131:3306/test
      driver-class-name: com.mysql.cj.jdbc.Driver
    slave:
      username: root
      password: 123456
      jdbc-url: jdbc:mysql://192.168.145.131:3306/test2
      driver-class-name: com.mysql.cj.jdbc.Driver

建库

创建test、test2库 test:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` int(11) NOT NULL,
  `grade` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

test2:

CREATE TABLE `teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` int(11) NOT NULL,
  `course` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


完善

目录结构 3.png

根据目录结构,请自行创建package和class。

config/MasterConfig

package com.mrcoder.sbmmultidbxml.config;
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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
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.mrcoder.sbmmultidbxml.mapper.master", sqlSessionTemplateRef = "masterSqlSessionTemplate")
public class MasterConfig {

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

    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //设置master数据源mapper文件路径
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "masterSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

config/SlaveConfig

package com.mrcoder.sbmmultidbxml.config;
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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.mrcoder.sbmmultidbxml.mapper.slave", sqlSessionTemplateRef = "slaveSqlSessionTemplate")
public class SlaveConfig {

    @Bean(name = "slaveDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.slave")
    public DataSource slaveDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //设置slave数据源mapper文件路径
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/slave/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "slaveTransactionManager")
    public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "slaveSqlSessionTemplate")
    public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

entity/Student

package com.mrcoder.sbmmultidbannotations.entity;
import java.io.Serializable;

public class Student implements Serializable {
    private int id;

    private String name;

    private int age;

    private int grade;

    public Student() {
    }

    public Student(String name, int age, int grade) {
        this.name = name;
        this.age = age;
        this.grade = grade;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", grade=" + grade +
                '}';
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
}

entity/Teacher

package com.mrcoder.sbmmultidbannotations.entity;
import java.io.Serializable;

public class Teacher implements Serializable {

    private int id;
    private String name;
    private int age;
    private int course;

    public Teacher() {
    }

    public Teacher(String name, int age, int course) {
        this.name = name;
        this.age = age;
        this.course = course;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", course='" + course + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getCourse() {
        return course;
    }

    public void setCourse(int course) {
        this.course = course;
    }
}

mapper/master/StudentMapper

package com.mrcoder.sbmmultidbxml.mapper.master;
import com.mrcoder.sbmmultidbxml.entity.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;

public interface StudentMapper {
//    @Select("SELECT * FROM student")
    List<Student> getList();

//    @Select("SELECT * FROM student WHERE id = #{id}")
    Student getById(int id);

//    @Insert("INSERT INTO student(age,grade,name) VALUES(#{age}, #{grade}, #{name})")
    void insert(Student student);

//    @Update("UPDATE student SET name=#{name},age=#{age}, grade=#{grade} WHERE id =#{id}")
    void update(Student student);

//    @Delete("DELETE FROM student WHERE id =#{id}")
    void delete(int id);
}

mapper/slave/TeacherMapper

package com.mrcoder.sbmmultidbxml.mapper.slave;
import com.mrcoder.sbmmultidbxml.entity.Teacher;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface TeacherMapper {
    //    @Select("SELECT * FROM teacher")
    List<Teacher> getList();

    //    @Select("SELECT * FROM teacher WHERE id = #{id}")
    Teacher getById(int id);

    //    @Insert("INSERT INTO teacher(age,course,name) VALUES(#{age}, #{course}, #{name})")
    void insert(Teacher teacher);

    //    @Update("UPDATE teacher SET name=#{name},age=#{age}, course=#{course} WHERE id =#{id}")
    void update(Teacher teacher);

    //    @Delete("DELETE FROM teacher WHERE id =#{id}")
    void delete(int id);
}

resources/mapper/master/StudentMapper.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.mrcoder.sbmmultidbxml.mapper.master.StudentMapper">
    <resultMap id="BaseResultMap" type="com.mrcoder.sbmmultidbxml.entity.Student">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="age" property="age" jdbcType="INTEGER"/>
        <result column="grade" property="grade" javaType="INTEGER"/>
    </resultMap>

    <sql id="Base_Column_List">
        id, name, age, grade
    </sql>

    <select id="getList" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM student
    </select>

    <select id="getById" parameterType="java.lang.Long" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM student
        WHERE id = #{id}
    </select>

    <insert id="insert" parameterType="com.mrcoder.sbmmultidbxml.entity.Student">
       INSERT INTO
       		student
       		(age,grade,name)
       	VALUES
       		(#{age}, #{grade}, #{name})
    </insert>

    <update id="update" parameterType="com.mrcoder.sbmmultidbxml.entity.Student">
        UPDATE
        student
        SET
        age = #{age},
        grade = #{grade},
        name = #{name}
        WHERE
        id = #{id}
    </update>

    <delete id="delete" parameterType="java.lang.Long">
       DELETE FROM
       		 student
       WHERE
       		 id =#{id}
    </delete>

</mapper>

resources/mapper/slave/TeacherMapper.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.mrcoder.sbmmultidbxml.mapper.slave.TeacherMapper">
    <resultMap id="BaseResultMap" type="com.mrcoder.sbmmultidbxml.entity.Teacher">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="age" property="age" jdbcType="INTEGER"/>
        <result column="course" property="course" javaType="INTEGER"/>
    </resultMap>

    <sql id="Base_Column_List">
        id, name, age, course
    </sql>

    <select id="getList" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM teacher
    </select>

    <select id="getById" parameterType="java.lang.Long" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM teacher
        WHERE id = #{id}
    </select>

    <insert id="insert" parameterType="com.mrcoder.sbmmultidbxml.entity.Teacher">
       INSERT INTO
       		teacher
       		(age,course,name)
       	VALUES
       		(#{age}, #{course}, #{name})
    </insert>

    <update id="update" parameterType="com.mrcoder.sbmmultidbxml.entity.Teacher">
        UPDATE
        teacher
        SET
        age = #{age},
        course = #{course},
        name = #{name}
        WHERE
        id = #{id}
    </update>

    <delete id="delete" parameterType="java.lang.Long">
       DELETE FROM
       		 teacher
       WHERE
       		 id =#{id}
    </delete>

</mapper>

controller/CurdController

package com.mrcoder.sbmmultidbxml.controller;
import com.mrcoder.sbmmultidbxml.entity.Student;
import com.mrcoder.sbmmultidbxml.entity.Teacher;
import com.mrcoder.sbmmultidbxml.mapper.master.StudentMapper;
import com.mrcoder.sbmmultidbxml.mapper.slave.TeacherMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
public class CurdController {

    @Autowired
    private StudentMapper studentMapper;

    @Autowired
    private TeacherMapper teacherMapper;

    @RequestMapping("/students")
    public List<Student> getStudentList() {
        List<Student> studentList = studentMapper.getList();
        return studentList;
    }

    @RequestMapping("/teachers")
    public List<Teacher> getTeacherList() {
        List<Teacher> teacherList = teacherMapper.getList();
        return teacherList;
    }
}

运行

http://localhost:8080/students 访问master数据源(test库)读取student表 http://localhost:8080/teachers 访问slave数据源(test2库)读取teacher表

项目地址

https://github.com/MrCoderStack/SpringBootDemo/tree/master/sbm-multidb-xml

https://gitee.com/MrCoderStack/SpringBootDemo/tree/master/sbm-multidb-xml

请关注我的订阅号

订阅号.png

转载于:https://my.oschina.net/u/3066875/blog/3055186

分享到:
评论

相关推荐

    springboot-shiro-mybatis-demo.zip

    本篇文章将详细介绍如何从零开始,使用SpringBoot、Shiro和MyBatis搭建一个完整的项目。 首先,我们来看一下项目的构建基础——`pom.xml`。这是Maven项目的核心配置文件,它定义了项目依赖、插件和项目信息。在`...

    springboot-mybatis3.rar

    总的来说,这个项目提供了一个从零开始的示例,展示了如何在SpringBoot环境中集成Mybatis和Shiro,以及如何设计RESTful API。对于想要学习这三个技术栈的开发者来说,这是一个很好的起点,通过实际操作,可以深入...

    SpringBoot+Mybatis+MySQL 学习练习项目源码+数据库+说明文档

    项目中附带的创建教程地址,应该是一个详细的步骤指南,教你如何从零开始搭建并运行这个项目,包括安装IDEA、导入项目、配置数据库连接、运行项目等步骤,对于初学者来说是非常有价值的资源。 总的来说,这个项目...

    Spring 学习系列 -- Spring + Mybatis 从零开始配置多数据源访问

    在本教程中,我们将深入探讨如何在Spring框架与Mybatis集成的环境中,配置多数据源访问。这是一项关键技能,特别是在开发大型企业级应用时,可能需要连接到多个数据库进行不同的业务操作。以下是对这个主题的详细...

    spring-springMVC-mybatis框架基本代码代码

    这个基础框架的目的是提供一个快速开发的起点,开发者可以在此基础上添加自己的业务逻辑和功能,而无需从零开始配置整个框架。通过理解和掌握SSM框架的运作机制,开发者可以更高效地开发和维护Java Web应用。

    spring-boot-mybatis-plus 一套打通 有注释 打开就可使用

    这样的项目通常包含完整的配置和示例代码,使得开发者可以立即上手,无需从零开始配置环境。 描述中提到的是最新版本的Spring Boot 2.x和MyBatis Plus。Spring Boot 2.x带来了许多改进和新特性,比如更好的性能、新...

    MyBatis3入门到精通教程

    本教程旨在带你从零开始,逐步掌握MyBatis3的核心概念和技术,实现数据库操作的高效、便捷。 1. **MyBatis简介** MyBatis是一个轻量级的Java持久层框架,它解决了传统JDBC代码繁琐的问题,将SQL语句与Java代码分离...

    MyBatis笔记

    本篇文章介绍了如何从零开始搭建MyBatis环境,包括导入库文件、配置DTD文件、创建数据库配置文件、配置主配置文件以及SQL映射文件。通过这些步骤,你可以轻松地使用MyBatis来进行数据库操作。需要注意的是,在实际...

    从零搭建Spring Boot脚手架,集成mybatis.docx

    本文将详细介绍如何从零开始搭建一个Spring Boot项目,并集成MyBatis框架。Spring Boot是一个基于Java的轻量级框架,简化了新Spring应用程序的初始设置和配置。而MyBatis是一个优秀的持久层框架,它支持自定义SQL、...

    zhizhong-imgage-server.rar

    最后,关于标签"sb整合mb",这表明该项目着重展示了SpringBoot和Mybatis的无缝集成,提供了从零开始搭建一个具备数据操作能力的服务实例。而"sb上传附"和"提取图片文字"则强调了项目在实际业务场景中的应用,涵盖了...

    mybatis_demo.zip

    【描述】: "通过Meavn构建工程,创建一个Mybatis的‘HelloWorld’工程"意味着这个压缩包提供了从零开始构建一个简单的Mybatis应用的步骤。Meavn是Maven的拼写错误,Maven是一个流行的Java项目管理工具,用于构建、...

    mybatis 使用 -【从头至尾,包含测试】

    本教程将涵盖 MyBatis 的核心概念、配置、映射器(Mapper)以及测试,帮助你从零开始全面了解并掌握 MyBatis。 1. **MyBatis 简介** MyBatis 是一个优秀的轻量级持久层框架,它避免了几乎所有的 JDBC 代码和手动...

    onexam.zip

    通过下载并解压 "onexam.zip",你可以直接得到一个预配置好的项目结构,节省了从零开始搭建环境的时间。这对于初学者来说是一个很好的学习资源,可以帮助他们快速理解 SpringBoot 和 Mybatis 如何协同工作,同时也为...

    Spinrg+SpirngMvc+Mybatis+Maven整合项目,打开即用

    这个整合项目提供了一种快速启动开发的方案,使得开发者无需从零开始搭建环境,只需进行必要的配置调整就能投入使用。 Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,有助...

    MyBatis简单使用案例

    总结来说,这个案例展示了如何从零开始设置一个简单的MyBatis项目,包括数据库配置、JavaBean实体、MyBatis配置文件和SQL映射文件的编写。通过这个案例,开发者可以理解MyBatis的基本工作流程,并以此为基础进行更...

    简单的毕设基础开发模板,包含通用结果封装、用户菜单配置、系统用户发送信息、mybatis-plus代码生成器、用户登录模块。适

    总的来说,这个模板为初学者提供了一个完整的开发环境,让他们能够专注于业务逻辑的实现,而不是从零开始搭建基础设施。通过学习和使用这个模板,开发者可以更好地理解和掌握SpringBoot、Mybatis-Plus以及权限管理等...

    MyBatis经典入门案例(初学者必备)

    本篇将围绕"MyBatis经典入门案例"展开,讲解如何从零开始搭建一个简单的MyBatis应用。 首先,我们需要了解MyBatis的基本构成。MyBatis主要由四个部分组成:SqlSessionFactoryBuilder、SqlSessionFactory、...

    (Spring整合)Spring+SpringMVC+MyBatis.zip

    在整合Spring、SpringMVC和MyBatis时,通常会通过Spring的DataSource、TransactionManager和SqlSessionFactoryBean来配置数据源、事务管理和SQL会话工厂。Spring的声明式事务管理可以确保在处理数据库操作时的事务...

    0搭建springboot项目步骤.zip

    在本文中,我们将深入探讨如何从零开始搭建一个Spring Boot项目,并逐步集成多个常用技术,如JDBC、JPA、MyBatis、Redis、MyBatisPlus和Swagger2。Spring Boot以其简洁的配置和快速的开发体验,已经成为Java开发者...

    ssm+maven使用详细教程

    SSM框架是Java web开发中常用的三大框架整合,包括Spring、Spring MVC和MyBatis。本教程详细介绍了如何使用Maven来...通过这个教程,开发者能够从零开始学习并掌握SSM框架的集成和使用,为Java Web开发打下坚实基础。

Global site tag (gtag.js) - Google Analytics