ShardingJDBC之分库分表

一、Sharding-JDBC简介Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。使用Sharding-JDBC可以实现数据分片、读写分离、分布式事务等需求。 本篇文章主要介绍通过Sharding-JDBC实现数据分片,即分库分表。 Sharding-JDBC提供了4种配置方式,用于不同的使用场景。本文只介绍Spring命名空间配置和SpringBoot配置。 二、准备工作在虚拟机上部署两台Mysql服务器,IP地址分别为192.168.0.150,192.168.0.152。 然后创建数据库,数据库名分别为sharding_order,shard_order以示区分。 在sharding_order,shard_order中均创建两张结构一致的表,表名分别为t_order_1,t_order_2。建表语句如下: CREATE TABLE `t_order_1` ( `id` int NOT NULL, `order_amount` decimal(10,2) NOT NULL, `order_status` int NOT NULL, `user_id` int NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; 三、创建项目在IDEA中新建SpringBoot项目,选择以下依赖 然后通过MyBatis Generator创建实体类和Dao层接口及Mapper文件。配置如下: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <!-- 配置文件路径 --> <properties resource="dbconfig.properties"/> <!--数据库驱动包路径 已经在Maven的pom配置过了,这里就不需要了--> <!--<classPathEntry location="${drive.class.path}"/>--> <context id="MySQLTables" targetRuntime="MyBatis3Simple"> <!--关闭注释 --> <commentGenerator> <property name="suppressDate" value="true"/> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库连接信息 --> <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"> </jdbcConnection> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!--生成的model 包路径 --> <javaModelGenerator targetPackage="${model.package}" targetProject="src\main\java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--生成xml mapper文件 路径 --> <sqlMapGenerator targetPackage="${xml.mapper.package}" targetProject="src\main\resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成的Dao接口 的包路径 --> <javaClientGenerator type="XMLMAPPER" targetPackage="${dao.package}" targetProject="src\main\java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--对应数据库表名 --> <table schema="sharding_order" tableName="t_order_1" domainObjectName="Order"></table> </context></generatorConfiguration>项目创建完成后的结构如下: ...

June 24, 2020 · 2 min · jiezi