package com.wudl.db.config;
/**
* @ClassName : MyThreadLocal
* @Description :
* @Author :wudl
* @Date: 2021-08-06 00:02
*/
public class MyThreadLocal {
public static final ThreadLocal<String>local=new ThreadLocal<String>();
public static String getDataSource(){return local.get();}
public static void setDataSource(String dataSource){
local.set(dataSource);}}
package com.wudl.db.model;
/**
* @ClassName : User
* @Description :
* @Author :wudl
* @Date: 2021-08-06 00:04
*/
public class User {
private Long id;
private String name;
public Long getId(){returnid;}
public void setId(Long id){
this.id =id;}
public String getName(){return name;}
public void setName(String name){
this.name = name;}}
package com.wudl.db.service;import com.wudl.db.config.MyThreadLocal;import com.wudl.db.model.User;import com.wudl.db.mapper.UserMapper;import org.springframework.stereotype.Service;import javax.annotation.Resource;import java.util.List;
/**
* @ClassName : UserService
* @Description :
* @Author :wudl
* @Date: 2021-08-06 00:05
*/
@Service("userService")
public class UserService {
@Resource
private UserMapper userMapper;
public void add(User user){
//切换数据源为主库
MyThreadLocal.setDataSource("master");
userMapper.insert(user);}
public List<User>selectAllMaster(){
//切换数据源为从库
MyThreadLocal.setDataSource("slave");return userMapper.selectAll();}
public List<User>selectAllSlave(){
//切换数据源为从库
MyThreadLocal.setDataSource("master");return userMapper.selectAll();}}
package com.wudl.db.mapper;import com.wudl.db.model.User;import org.apache.ibatis.annotations.Mapper;import java.util.List;
/**
* @ClassName : UserMapper
* @Description :
* @Author :wudl
* @Date: 2021-08-06 00:03
*/
@Mapper
public interface UserMapper {
int deleteByPrimaryKey(Long id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
List<User> selectAll();}
<?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.wudl.db.mapper.UserMapper"><resultMap id="BaseResultMap"type="com.wudl.db.model.User"><id column="id"jdbcType="BIGINT"property="id" /><result column="name"jdbcType="VARCHAR"property="name" /></resultMap><sql id="Base_Column_List">
id, name
</sql><select id="selectAll"resultMap="BaseResultMap">select<include refid="Base_Column_List" />
from t_user
</select><select id="selectByPrimaryKey"parameterType="java.lang.Long"resultMap="BaseResultMap">select<include refid="Base_Column_List" />
from t_user
where id=#{id,jdbcType=BIGINT}</select><delete id="deleteByPrimaryKey"parameterType="java.lang.Long">
delete from t_user
where id=#{id,jdbcType=BIGINT}</delete><insert id="insert"parameterType="com.wudl.db.model.User">
insert into t_user (id, name)
values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR})</insert><insert id="insertSelective"parameterType="com.wudl.db.model.User">
insert into t_user
<trim prefix="("suffix=")"suffixOverrides=","><if test="id != null">
id,
</if><if test="name != null">
name,
</if></trim><trim prefix="values ("suffix=")"suffixOverrides=","><if test="id != null">#{id,jdbcType=BIGINT},</if><if test="name != null">#{name,jdbcType=VARCHAR},</if></trim></insert><update id="updateByPrimaryKeySelective"parameterType="com.wudl.db.model.User">
update t_user
<set><if test="name != null">
name =#{name,jdbcType=VARCHAR},</if></set>
where id=#{id,jdbcType=BIGINT}</update><update id="updateByPrimaryKey"parameterType="com.wudl.db.model.User">
update t_user
set name =#{name,jdbcType=VARCHAR}
where id=#{id,jdbcType=BIGINT}</update></mapper>