一、垂直分库
定义规则:创建两个数据库,一个是user_db(用户数据库),一个是course_db(课程数据库);用户数据库中有用户表t_user,在查询用户信息的时候,就到用户数据库中去查
步骤一:创建库和表
步骤二:创建实体类和Mapper
步骤三:编写配置文件
#分片策略配置#配置数据源名称, 水平分库,需要配置两个数据源spring.shardingsphere.datasource.names=db1,db2,db3#配置第一个数据源spring.shardingsphere.datasource.db1.type=com.alibaba.druid.pool.DruidDataSourcespring.shardingsphere.datasource.db1.driver-class-name=com.mysql.cj.jdbc.Driverspring.shardingsphere.datasource.db1.url=jdbc:mysql://172.16.235.3:3306/course_db_1?serverTimezone=GMT%2B8spring.shardingsphere.datasource.db1.username=rootspring.shardingsphere.datasource.db1.password=123456#配置第二个个数据源spring.shardingsphere.datasource.db2.type=com.alibaba.druid.pool.DruidDataSourcespring.shardingsphere.datasource.db2.driver-class-name=com.mysql.cj.jdbc.Driverspring.shardingsphere.datasource.db2.url=jdbc:mysql://172.16.235.3:3306/course_db_2?serverTimezone=GMT%2B8spring.shardingsphere.datasource.db2.username=rootspring.shardingsphere.datasource.db2.password=123456#配置第三个数据源spring.shardingsphere.datasource.db3.type=com.alibaba.druid.pool.DruidDataSourcespring.shardingsphere.datasource.db3.driver-class-name=com.mysql.cj.jdbc.Driverspring.shardingsphere.datasource.db3.url=jdbc:mysql://172.16.235.3:3306/user_db?serverTimezone=GMT%2B8spring.shardingsphere.datasource.db3.username=rootspring.shardingsphere.datasource.db3.password=123456#配置user_db里t_user的分库规则spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=db$->{3}.t_userspring.shardingsphere.sharding.tables.t_user.key-generator.column=userIdspring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKEspring.shardingsphere.sharding.tables.t_user.database-strategy.inline.sharding-column=user_idspring.shardingsphere.sharding.tables.t_user.database-strategy.inline.algorithm-expression=t_user...
步骤四:编写测试代码
@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);
}
报错处理:
原因分析:
之前我们操作course表的时候,因为我们的课程表叫做 course_1,course_2,
但是我们的用户表,叫做 t_user。
课程表对应的实体类是Course,所以springboot能够找到表,
但我们的用户类叫做User,SpringBoot没有找到你要操作哪张表。
解决方法:在User类中指定表名
