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 );
建好后的库和表如下:
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}