适用于多种场景: 纯粹多库、 读写分离、 一主多从、 混合模式等。目前我们就来模拟一个纯粹多库的一个场景,其他场景类似
准备数据: 我们创建两个库,分别为: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表的数据源信息}}