SpringBoot与shardingsphere分库分表实战(1)

假设有一张订单表,我们需要将它分成2个库,每个库三张表,根据id字段取模确定最终数据的位置,数据库环境配置如下:

  • 172.31.0.129

  • blog

  • t_order_0

  • t_order_1

  • t_order_2

  • 172.31.0.131

  • blog

  • t_order_0

  • t_order_1

  • t_order_2

三张表的逻辑表为t_order,大家可以根据建表语句准备好其他所有数据表。

DROP TABLE IF EXISTS `t_order_0;

CREATE TABLE t_order_0 (

id bigint(20) NOT NULL,

name varchar(255) DEFAULT NULL COMMENT ‘名称’,

type varchar(255) DEFAULT NULL COMMENT ‘类型’,

gmt_create timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘创建时间’,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

注意,千万不能将主键的生成规则设置成自增长,需要按照一定规则来生成主键,这里使用shardingsphere中的SNOWFLAKE俗称雪花算法来生成主键

代码实现


  • 修改pom.xml,引入相关组件

<java.version>1.8</java.version>

<mybatis-plus.version>3.1.1</mybatis-plus.version>

<sharding-sphere.version>4.0.0-RC2</sharding-sphere.version>

org.springframework.boot

spring-boot-starter-web

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.0.1

mysql

mysql-connector-java

8.0.15

com.baomidou

mybatis-plus-boot-starter

${mybatis-plus.version}

org.apache.shardingsphere

sharding-jdbc-spring-boot-starter

${sharding-sphere.version}

org.apache.shardingsphere

sharding-jdbc-spring-namespace

${sharding-sphere.version}

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

  • 配置mysql-plus

@Configuration

@MapperScan(“com.github.jianzh5.blog.mapper”)

public class MybatisPlusConfig {

/**

  • 攻击 SQL 阻断解析器

*/

@Bean

public PaginationInterceptor paginationInterceptor(){

PaginationInterceptor paginationInterceptor = new PaginationInterceptor();

List sqlParserList = new ArrayList<>();

sqlParserList.add(new BlockAttackSqlParser());

paginationInterceptor.setSqlParserList(sqlParserList);

return new PaginationInterceptor();

}

/**

  • SQL执行效率插件

*/

@Bean

// @Profile({“dev”,“test”})

public PerformanceInterceptor performanceInterceptor() {

return new PerformanceInterceptor();

}

}

  • 编写实体类Order

@Data

@TableName(“t_order”)

public class Order {

private Long id;

private String name;

private String type;

private Date gmtCreate;

}

  • 编写DAO层,OrderMapper

/**

  • 订单Dao层

*/

public interface OrderMapper extends BaseMapper {

}

  • 编写接口及接口实现

public interface OrderService extends IService {

}

/**

  • 订单实现层

  • @author jianzh5

  • @date 2019/10/15 17:05

*/

@Service

public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {

}

  • 配置文件(配置说明见备注)

server.port=8080

配置ds0 和ds1两个数据源

spring.shardingsphere.datasource.names = ds0,ds1

#ds0 配置

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://192.168.249.129:3306/blog?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
;" />

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

[外链图片转存中…(img-bydLXqmb-1713404336063)]

[外链图片转存中…(img-Lu3yLCHg-1713404336063)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值