一、垂直分库

定义规则:创建两个数据库,一个是user_db(用户数据库),一个是course_db(课程数据库);用户数据库中有用户表t_user,在查询用户信息的时候,就到用户数据库中去查
步骤一:创建库和表
image.png
步骤二:创建实体类和Mapper
image.png
步骤三:编写配置文件

  1. #分片策略配置
  2. #配置数据源名称, 水平分库,需要配置两个数据源
  3. spring.shardingsphere.datasource.names=db1,db2,db3
  4. #配置第一个数据源
  5. spring.shardingsphere.datasource.db1.type=com.alibaba.druid.pool.DruidDataSource
  6. spring.shardingsphere.datasource.db1.driver-class-name=com.mysql.cj.jdbc.Driver
  7. spring.shardingsphere.datasource.db1.url=jdbc:mysql://172.16.235.3:3306/course_db_1?serverTimezone=GMT%2B8
  8. spring.shardingsphere.datasource.db1.username=root
  9. spring.shardingsphere.datasource.db1.password=123456
  10. #配置第二个个数据源
  11. spring.shardingsphere.datasource.db2.type=com.alibaba.druid.pool.DruidDataSource
  12. spring.shardingsphere.datasource.db2.driver-class-name=com.mysql.cj.jdbc.Driver
  13. spring.shardingsphere.datasource.db2.url=jdbc:mysql://172.16.235.3:3306/course_db_2?serverTimezone=GMT%2B8
  14. spring.shardingsphere.datasource.db2.username=root
  15. spring.shardingsphere.datasource.db2.password=123456
  16. #配置第三个数据源
  17. spring.shardingsphere.datasource.db3.type=com.alibaba.druid.pool.DruidDataSource
  18. spring.shardingsphere.datasource.db3.driver-class-name=com.mysql.cj.jdbc.Driver
  19. spring.shardingsphere.datasource.db3.url=jdbc:mysql://172.16.235.3:3306/user_db?serverTimezone=GMT%2B8
  20. spring.shardingsphere.datasource.db3.username=root
  21. spring.shardingsphere.datasource.db3.password=123456
  22. #配置user_db里t_user的分库规则
  23. spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=db$->{3}.t_user
  24. spring.shardingsphere.sharding.tables.t_user.key-generator.column=userId
  25. spring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKE
  26. spring.shardingsphere.sharding.tables.t_user.database-strategy.inline.sharding-column=user_id
  27. spring.shardingsphere.sharding.tables.t_user.database-strategy.inline.algorithm-expression=t_user
  28. ...

步骤四:编写测试代码

      @Test
    void addUser(){
        User user = new User();
        user.setUserName("张三");
        user.setUstate(1);
        userMapper.insert(user);
    }

    @Test
    void getUserByName(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_name","张三");
        User user = userMapper.selectOne(queryWrapper);
        System.out.println(user);
    }

报错处理:
image.png
原因分析:
之前我们操作course表的时候,因为我们的课程表叫做 course_1,course_2,
但是我们的用户表,叫做 t_user。
课程表对应的实体类是Course,所以springboot能够找到表,
但我们的用户类叫做User,SpringBoot没有找到你要操作哪张表。
解决方法:在User类中指定表名
image.png