- 浏览: 71239 次
-
文章分类
最新评论
15.从零开始学springboot-mybatis-多数据源-xml方式
前言
上一章我们实现了springboot-mybatis-多数据源-annotations注解方式对mysql的操作访问,本章我们继续来实现 springboot-mybatis-多数据源-xml方式的案例。
创建空项目
添加依赖
<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>
添加配置
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;
完善
目录结构
根据目录结构,请自行创建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
请关注我的订阅号
转载于:https://my.oschina.net/u/3066875/blog/3055186
相关推荐
本篇文章将详细介绍如何从零开始,使用SpringBoot、Shiro和MyBatis搭建一个完整的项目。 首先,我们来看一下项目的构建基础——`pom.xml`。这是Maven项目的核心配置文件,它定义了项目依赖、插件和项目信息。在`...
总的来说,这个项目提供了一个从零开始的示例,展示了如何在SpringBoot环境中集成Mybatis和Shiro,以及如何设计RESTful API。对于想要学习这三个技术栈的开发者来说,这是一个很好的起点,通过实际操作,可以深入...
项目中附带的创建教程地址,应该是一个详细的步骤指南,教你如何从零开始搭建并运行这个项目,包括安装IDEA、导入项目、配置数据库连接、运行项目等步骤,对于初学者来说是非常有价值的资源。 总的来说,这个项目...
在本教程中,我们将深入探讨如何在Spring框架与Mybatis集成的环境中,配置多数据源访问。这是一项关键技能,特别是在开发大型企业级应用时,可能需要连接到多个数据库进行不同的业务操作。以下是对这个主题的详细...
这个基础框架的目的是提供一个快速开发的起点,开发者可以在此基础上添加自己的业务逻辑和功能,而无需从零开始配置整个框架。通过理解和掌握SSM框架的运作机制,开发者可以更高效地开发和维护Java Web应用。
这样的项目通常包含完整的配置和示例代码,使得开发者可以立即上手,无需从零开始配置环境。 描述中提到的是最新版本的Spring Boot 2.x和MyBatis Plus。Spring Boot 2.x带来了许多改进和新特性,比如更好的性能、新...
本教程旨在带你从零开始,逐步掌握MyBatis3的核心概念和技术,实现数据库操作的高效、便捷。 1. **MyBatis简介** MyBatis是一个轻量级的Java持久层框架,它解决了传统JDBC代码繁琐的问题,将SQL语句与Java代码分离...
本篇文章介绍了如何从零开始搭建MyBatis环境,包括导入库文件、配置DTD文件、创建数据库配置文件、配置主配置文件以及SQL映射文件。通过这些步骤,你可以轻松地使用MyBatis来进行数据库操作。需要注意的是,在实际...
本文将详细介绍如何从零开始搭建一个Spring Boot项目,并集成MyBatis框架。Spring Boot是一个基于Java的轻量级框架,简化了新Spring应用程序的初始设置和配置。而MyBatis是一个优秀的持久层框架,它支持自定义SQL、...
最后,关于标签"sb整合mb",这表明该项目着重展示了SpringBoot和Mybatis的无缝集成,提供了从零开始搭建一个具备数据操作能力的服务实例。而"sb上传附"和"提取图片文字"则强调了项目在实际业务场景中的应用,涵盖了...
【描述】: "通过Meavn构建工程,创建一个Mybatis的‘HelloWorld’工程"意味着这个压缩包提供了从零开始构建一个简单的Mybatis应用的步骤。Meavn是Maven的拼写错误,Maven是一个流行的Java项目管理工具,用于构建、...
本教程将涵盖 MyBatis 的核心概念、配置、映射器(Mapper)以及测试,帮助你从零开始全面了解并掌握 MyBatis。 1. **MyBatis 简介** MyBatis 是一个优秀的轻量级持久层框架,它避免了几乎所有的 JDBC 代码和手动...
通过下载并解压 "onexam.zip",你可以直接得到一个预配置好的项目结构,节省了从零开始搭建环境的时间。这对于初学者来说是一个很好的学习资源,可以帮助他们快速理解 SpringBoot 和 Mybatis 如何协同工作,同时也为...
这个整合项目提供了一种快速启动开发的方案,使得开发者无需从零开始搭建环境,只需进行必要的配置调整就能投入使用。 Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,有助...
总结来说,这个案例展示了如何从零开始设置一个简单的MyBatis项目,包括数据库配置、JavaBean实体、MyBatis配置文件和SQL映射文件的编写。通过这个案例,开发者可以理解MyBatis的基本工作流程,并以此为基础进行更...
总的来说,这个模板为初学者提供了一个完整的开发环境,让他们能够专注于业务逻辑的实现,而不是从零开始搭建基础设施。通过学习和使用这个模板,开发者可以更好地理解和掌握SpringBoot、Mybatis-Plus以及权限管理等...
本篇将围绕"MyBatis经典入门案例"展开,讲解如何从零开始搭建一个简单的MyBatis应用。 首先,我们需要了解MyBatis的基本构成。MyBatis主要由四个部分组成:SqlSessionFactoryBuilder、SqlSessionFactory、...
在整合Spring、SpringMVC和MyBatis时,通常会通过Spring的DataSource、TransactionManager和SqlSessionFactoryBean来配置数据源、事务管理和SQL会话工厂。Spring的声明式事务管理可以确保在处理数据库操作时的事务...
在本文中,我们将深入探讨如何从零开始搭建一个Spring Boot项目,并逐步集成多个常用技术,如JDBC、JPA、MyBatis、Redis、MyBatisPlus和Swagger2。Spring Boot以其简洁的配置和快速的开发体验,已经成为Java开发者...
SSM框架是Java web开发中常用的三大框架整合,包括Spring、Spring MVC和MyBatis。本教程详细介绍了如何使用Maven来...通过这个教程,开发者能够从零开始学习并掌握SSM框架的集成和使用,为Java Web开发打下坚实基础。