1 创建数据库

分别创建两个数据库,并在数据库中创建两个相同的表。

这里创建的数据库是: shardingjdbc1,shardingjdbc2

并在数据库下创建两张表:orders, order\_info

CREATE TABLE orders (

id INT(11) NOT NULL AUTO\_INCREMENT,

customer VARCHAR(50) NULL DEFAULT '0' COLLATE 'utf8mb4\_bin',

number INT(11) NOT NULL DEFAULT '0',

amount FLOAT(12,0) NOT NULL DEFAULT '0',

PRIMARY KEY (id) USING BTREE );

CREATE TABLE order_info (

id INT(11) NOT NULL AUTO\_INCREMENT,

order_id INT(11) NULL DEFAULT NULL,

description VARCHAR(50) NULL DEFAULT NULL,

PRIMARY KEY (id) USING BTREE );

建好后的库和表如下:

ShardingJDBC 04_分库实战_数据

2 创建 SpringBoot 工程

2.1 添加 maven 依赖

在pom.xml文件中添加如下依赖包。

主要是 shardingjdbc 的包,以及 mysql 驱动、springboot 连接数据库、处理数据相关的包。我们为了简化实体类代码冗余,也可以引入 lombok 包。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.1</version>
</dependency>

2.2 创建实体类及数据操作接口

2.2.1 创建实体类

实体类的字段,需要和数据表中的字段名建立对应关系。

  • @Entity 类名上加上该注解,来表明这是一个实体类
  • @Table 类名上加上该注解,设置数据表的名称
  • @Id 属性字段上加上该注解,表明这是一个主键
  • @Column 属性字段加上该注解,与数据表中的字段建立映射关系
package com.myjdbc.entity;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;

/***
 * 实体类
 */
@Data
@Entity
@Table(name = "orders")
public class Orders implements Serializable {

    @Id
    @Column(name = "id", nullable = false)
    private Integer id;

    @Column(name = "customer")
    private String customer;

    @Column(name = "number")
    private int number;

    @Column(name = "amount")
    private float amount;
}

2.2.2 创建数据操作接口

该接口继承了 jpa 的 JpaRepository 接口,该接口中提供了对数据表的增删改查等操作。

package com.myjdbc.repository;

import com.myjdbc.entity.Order;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * 数据操作接口
 */
public interface OrderRepository extends JpaRepository<Orders, Integer> {
}

2.3 创建配置文件

2.3.1 创建主配置文件

创建 application.properties 文件中,定义了 shardingjdbc 需要读取的数据源配置文件位置,及打印出过程中的SQL语句。

spring.shardingsphere.props.sql.show=true 输出执行的SQL语句

spring.profiles.active=sharding-database
spring.shardingsphere.props.sql.show=true

2.3.2 创建ShardingJDBC配置

创建 application-sharding-database.properties 配置文件, 这里主要配置数据源信息,包括数据节点、数据库连接信息等。

数据库节点信息

  • spring.shardingsphere.datasource.names 数据库节点名,当有多个节点时,其下信息需要分别配置。

数据节点配置

  • spring.shardingsphere.datasource.ds0.type 数据节点类型,固定值
  • spring.shardingsphere.datasource.ds0.driver-class-name 数据节点的驱动类
  • spring.shardingsphere.datasource.ds0.jdbc-url 数据节点的连接串
  • spring.shardingsphere.datasource.ds0.username 连接数据节点的用户名
  • spring.shardingsphere.datasource.ds0.password 连接数据节点的密码

分片规则设置

  • spring.shardingsphere.sharding.tables.orders.database-strategy.inline.sharding-column 进行分片设置的表及表中字段
  • 表名在 spring.shardingsphere.sharding.tables 后进行设置
  • 分片的字段名,则为该配置的属性值
  • spring.shardingsphere.sharding.tables.orders.database-strategy.inline.algorithm-expression 分片规则,这里设置的 ds\${id%2},表示将 id 值对2取模:
  • 等于0时,将数据放入 ds0 节点
  • 等于1时,将数据放入 ds1 节点
#datasource
spring.shardingsphere.datasource.names=ds0,ds1

spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://127.0.0.1:3366/shardingjdbc1?characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=123456

spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://127.0.0.1:3366/shardingjdbc2?characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=123456

spring.shardingsphere.sharding.tables.orders.database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.orders.database-strategy.inline.algorithm-expression=ds${id%2}