Springboot集成Mybatis之多数据源

在实际项目开发中,我们经常会配置多个数据库,主数据库主要负责增删改操作,从数据库则负责查询操作。这样做的好处是可以减轻主数据库的压力,提高系统响应能力。
下面就讲一下Springboot集成Mybatis如何配置多数据源。
1、首先新建一个springboot项目,名字就叫multibatis吧,springboot的版本就用2.0.5.RELEASE。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/>
</parent>

2、导入相应的jar包

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- mysql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

3、新建User实体类

import lombok.Data;
import lombok.ToString;
import java.io.Serializable;

@Data
@ToString
public class User implements Serializable {
    private Integer id;
    private String userName;
    private Integer userAge;
}

4、新建MasterUserMapper,新增用户add方法;新建SlaveUserMapper类,新增查询用户sel方法

import com.multibatis.model.User;
import org.springframework.stereotype.Repository;

@Repository
public interface MasterUserMapper {
    void add(User user);
}

import com.multibatis.model.User;
import org.springframework.stereotype.Repository;

@Repository
public interface SlaveUserMapper {
    User sel(int id);
}

5、在资源目录resources下新建mapping.master目录,并创建MasterUserMapping.xml文件,配置add方法;新建mapping.slave目录,并创建SlaveUserMapping.xml文件,配置sel方法。
MasterUserMapping.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.multibatis.mapper.master.MasterUserMapper">
    <!-- 开启二级缓存 -->
    <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"></cache>
    <resultMap id="BaseResultMap" type="com.multibatis.model.User">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="user_name" jdbcType="VARCHAR" property="userName" />
        <result column="user_age" jdbcType="INTEGER" property="userAge" />
    </resultMap>

    <sql id="baseSql">
        select id, user_name, user_age from t_user
    </sql>

    <insert id="add" parameterType="com.multibatis.model.User">
        INSERT INTO t_user(user_name, user_age) VALUES (#{userName}, #{userAge});
    </insert>
</mapper>

SlaveUserMapping.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.multibatis.mapper.slave.SlaveUserMapper">
    <!-- 开启二级缓存 -->
    <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"></cache>
    <resultMap id="BaseResultMap" type="com.multibatis.model.User">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="user_name" jdbcType="VARCHAR" property="userName" />
        <result column="user_age" jdbcType="INTEGER" property="userAge" />
    </resultMap>

    <sql id="baseSql">
        select id, user_name, user_age from t_user
    </sql>

    <select id="sel" resultMap="BaseResultMap" parameterType="java.lang.Integer">
        <include refid="baseSql"/> where id = #{id}
    </select>
</mapper>

6、在resources目录的application.properties配置文件下新增mybatis的多数据源配置

server.port=8080

# mysql主数据库配置
spring.datasource.master.jdbc-url=jdbc:mysql://localhost:3306/master
spring.datasource.master.username=root
spring.datasource.master.password=root
spring.datasource.master.driver-class-name=com.mysql.jdbc.Driver

# mysql从数据库配置
spring.datasource.slave.jdbc-url=jdbc:mysql://localhost:3306/slave
spring.datasource.slave.username=root
spring.datasource.slave.password=root
spring.datasource.slave.driver-class-name=com.mysql.jdbc.Driver

# mybatis配置
# 开启mybatis的二级缓存
mybatis.configuration.cache-enabled=true

# 开启sql打印
logging.level.com.multibatis.mapper=debug

7、创建UserService接口类

import com.multibatis.model.User;

public interface UserService {
    public User sel(int id);
    public void add(User user);
}

8、创建实现类UserServiceImpl

import com.multibatis.mapper.master.MasterUserMapper;
import com.multibatis.mapper.slave.SlaveUserMapper;
import com.multibatis.model.User;
import com.multibatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private MasterUserMapper masterUserMapper;

    @Autowired
    private SlaveUserMapper slaveUserMapper;

    @Override
    public User sel(int id) {
        return slaveUserMapper.sel(id);
    }

    @Override
    public void add(User user) {
        masterUserMapper.add(user);
    }
}

9、创建控制器类UserController

import com.multibatis.model.User;
import com.multibatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/getUser/{id}", method = RequestMethod.GET)
    public String getUser(@PathVariable int id) {
        User user = userService.sel(id);
        if (user == null) {
            return "";
        }
        return user.toString();
    }

    @RequestMapping(value = "/addUser", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    public String addUser(@RequestBody User user) {
        try {
            userService.add(user);
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
        return "success";
    }
}

10、在mysql的master、slave两个库分别创建t_user表

CREATE TABLE `t_user` (
	`id` INT(32) NOT NULL AUTO_INCREMENT,
	`user_name` VARCHAR(32) NOT NULL,
	`user_age` INT(3) NOT NULL,
	PRIMARY KEY (`id`) USING BTREE
)

11、启动multibatis项目并使用postman测试
新增用户:
在这里插入图片描述
查询用户:
在这里插入图片描述
至此Springboot集成Mybatis并配置多数据源的操作已经全部完成,测试也非常成功!(此处并没有在主数据库和从数据库之间设置主从复制,只是在从数据库手动插入了一条数据)
本项目只在MasterUserMapper中配置了add方法,在SlaveUserMapper中配置了sel方法,这样可以达到主数据库只负责增删改操作,从数据库只负责查询的操作。实际项目中,还可以通过mybatis拦截器来实现。
有可以改进的地方希望诸位同学不要吝惜笔墨,加以指正,万分感谢!

本文参考链接:
http://www.ityouknow.com/springboot/2016/11/25/spring-boot-multi-mybatis.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值