sharding jdbc 分库分表


sharding jdbc 分库分表

 

 

*******************************

示例

 

user:id、name、age

order:id、user_id

其中,user仅分表不分库,order分库分表

 

创建数据库、表:

db0:user_0、user_1,order_0、order_1

db1:order_0、order_1

 

 

*********************

配置文件

 

application.yml

spring:
  shardingsphere:
    datasource:
      names: db0,db1
      db0:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/db0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
        username: root
        password: 123456
      db1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
        username: root
        password: 123456
    sharding:
      default-database-strategy:
        inline:
          sharding-column: user_id
          algorithm-expression: db$->{user_id%2}
      tables:
        user:
          actual-data-nodes: db0.user_${0..1}
          table-strategy:
            inline:
              sharding-column: id
              algorithm-expression: user_$->{id%2}
        order:
          actual-data-nodes: db$->{0..1}.order_$->{0..1}
          table-strategy:
            inline:
              sharding-column: id
              algorithm-expression: order_$->{id%2}

 

*********************

pojo 层

 

User

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="User对象", description="")
public class User extends Model<User> {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.ID_WORKER)
    private Long id;

    private String name;

    private Integer age;


    @Override
    protected Serializable pkVal() {
        return this.id;
    }

}

 

Order

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="OrderItem对象", description="")
public class Order extends Model<OrderItem> {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.ID_WORKER)
    private Long id;

    private Integer userId;


    @Override
    protected Serializable pkVal() {
        return this.id;
    }

}

 

*********************

controller 层

 

UserController

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;
    
    @RequestMapping("/save")
    public String save(){
        for(int i=0;i<10;i++){
            User user=new User();
            user.setName("瓜田李下"+i);
            user.setAge(i+10);
            
            userService.save(user);
        }
        
        return "success";
    }
}

 

OrderController

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @RequestMapping("/save")
    public String save(){
        for(int i=0;i<10;i++){
            Order order=new Order();
            order.setUser(i+10);

            orderService.save(order);
        }

        return "success";
    }
}

 

 

****************************

插入测试

 

user表插入测试

                                

                                

 

order表插入测试

                              

                             

 

                              

 

                            

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值