ShardingJDBC 05_分库测试

116 阅读1分钟

上一篇完成了实体类及配置文件编写后,现在进行测试。

1 创建测试类

image.png

在 test 目录下创建测试类 TestOrder,并引用 OrderRepository 接口对象,因为要通过该接口向数据库插入数据。

使用注解 @SpringBootTest ,指定 SpringBoot 的启动类。

在测试类中插入20条 orders 记录.

package com.myjdbc;

import com.myjdbc.entity.Orders;
import com.myjdbc.repository.OrderRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;


@RunWith(SpringRunner.class)
@SpringBootTest(classes = ShardingJdbc.class)
public class TestOrder {

    @Resource
    private OrderRepository orderRepository;

    @Test
    public void TestAdd(){
        for (int i = 0; i < 20;) {
            Orders orders = new Orders();
            orders.setId(i++);
            orders.setCustomer("张三" + i);
            orders.setAmount((float) (Math.random() * 1000));
            orders.setNumber((int)(Math.random() * 10));

            orderRepository.save(orders);
        }
    }
}

2 创建启动类

因为要使用 springboot 的测试类,还需要创建一个 springboot 的启动类。

因为不是真的要启动 springboot,这里只需要创建一个空类即可。

image.png

3 运行测试程序

3.1 控制台

执行测试后,查看控制台输出:

数据表、数据表的分片策略、分片的字段,都在控制台里能找到。 image.png

插入数据前先查询

image.png

在执行插入语句之前,先进行一次查询,一次数据库操作分为三条语句:

  • Logic SQL 逻辑SQL语句,
    • 如 select orders0_.id as id1_0_0_, orders0_.amount as amount2_0_0_, orders0_.customer as customer3_0_0_, orders0_.number as number4_0_0_ from orders orders0_ where orders0_.id=?
  • SQLStatement
    • 这里展示了SQL执行过程中使用到的上下文
  • Actual SQL 实际执行的SQL语句及在哪个分片上进行的操作
    • 如 ds0 ::: select orders0_.id as id1_0_0_, orders0_.amount as amount2_0_0_, orders0_.customer as customer3_0_0_, orders0_.number as number4_0_0_ from orders orders0_ where orders0_.id=? ::: [0]
    • 这条查询是在分片 ds0 进行的

3.2 数据库

查看数据库的执行结果

分片1

image.png

分片2

image.png