适用于多种场景: 纯粹多库、 读写分离、 一主多从、 混合模式等。目前我们就来模拟一个纯粹多库的一个场景,其他场景类似
准备数据: 我们创建两个库,分别为:mybatis_plus(这个库是我们现在正在用的)与mybatis_plus_1(需要新建),将mybatis_plus库的product表移动到mybatis_plus_1库, 这样每个库一张表,通过一个测试用例,分别获取用户数据与商品数据,如果获取到说明多库模拟成功,简单说就是t_user表在mybatis_plus库,t_product表在mybatis_plus_1库
具体操作:
第一步: 创建mybatis_plus_1库并添加数据,语句如下
CREATE DATABASE `mybatis_plus_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus_1`;
CREATE TABLE product(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称',
price INT(11) DEFAULT 0 COMMENT '价格',
version INT(11) DEFAULT 0 COMMENT '乐观锁版本号',
PRIMARY KEY (id));
INSERT INTO product (id, NAME, price) VALUES (1, '外星人笔记本', 100);
第二步: 删除我们正在用的mybatis_plus表的t_product表,语句如下
use mybatis_plus;
DROP TABLE IF EXISTS product;
第三步: 在idea中搭建多数据源环境的项目,我会在笔记里面给出操作过程的截图
第四步: 在src/main/java/com.huanf.mybatisplus目录下新建mapper.UserMapper接口,并写入如下
//@Repository注解的作用是将Mapper接口标识为Spring Bean,从而使得MyBatis-Plus能够自动扫描并注入Mapper接口
public interface UserMapper extends BaseMapper<User> {
}
第五步: 在src/main/java/com.huanf.mybatisplus目录下新建pojo.User类,写入如下
"t_user")//由于我们的表名叫t_user,不是叫user,所以需要使用该注解指定一下表名 (
public class User {
//指定主键
private Integer uid;
private String userName;
private Integer age;
private Integer sex;
private String email;
//逻辑删除字段,非必须
private Integer isDeleted;
}
第六步: 在src/main/java/com.huanf.mybatisplus/pojo目录下新建Product类,写入如下
public class Product {
private Integer id;
private String name;
private Integer price;
private Integer version;
}
第七步: 在src/main/java/com.huanf.mybatisplus/mapper目录下新建ProductMapper接口,并写入如下
x
//@Repository注解的作用是将Mapper接口标识为Spring Bean,从而使得MyBatis-Plus能够自动扫描并注入Mapper接口
public interface ProductMapper extends BaseMapper<Product> {
}
第八步: 在MyBatisPlusDatasourcesApplication类(不是我们创建的,自动创建好的)添加如下
"com.huanf.mybatisplus.mapper")//扫描我们接口所在的包 (
public class MybatisPlusDatasourcesApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusDatasourcesApplication.class, args);
}
}
第九步: 在src/main/java/com.huanf.mybatisplus目录下新建service.UserService接口,写入如下
public interface UserService extends IService<User> {
}
第十步: 在src/main/java/com.huanf.mybatisplus/service目录下新建impl.UserServiceImp类,写入如下
//该注解是将该类表示为业务层组件
"master")//该注解是指定数据源 (
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
第十一步: 在src/main/java/com.huanf.mybatisplus/service目录下新建ProductService接口,写入如下
public interface ProductService extends IService<Product> {
}
第十二步: 在src/main/java/com.huanf.mybatisplus/service/impl目录下新建ProductServiceImpl类,写入如下
//该注解是将该类表示为业务层组件
"slave_1")//该注解是指定数据源 (
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
}
第十三步: 在src/test/java/com.huanf.mybatisplus/目录的MyBatisPlusDatasourcesApplicationTests类写入如下,并执行zidingyi_test()测试
class MybatisPlusDatasourcesApplicationTests {
void contextLoads() {
}
//注入,作用是我们可以使用创建好的UserService接口、ProductService接口
private UserService userService;
private ProductService productService;
public void zidingyi_test(){
System.out.println(userService.getById(1));//查询userService接口对应的user表的数据源信息
System.out.println(productService.getById(1));//查询productService接口对应的product表的数据源信息
}
}