Sharding-jdbc實現水平分表


1、搭建環境

(1)SpringBoot2.2.1+MyBatisPlus+Sharding-JDBC+Druid連接池

(2)創建SpringBoot工程,版本2.2.1

clipboard

(3)引入相關依賴

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.20</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.0.0-RC1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

 

2、按照水平分表的方式創建數據庫,創建數據庫表

(1)創建數據庫 course_db

(2)在數據庫中創建兩張表 course_1 和 course_2

(3)約定一種規則:如果添加的課程id是偶數,把數據添加到course_1

如果是基數,則添加到course2

clipboard

 

3、編寫代碼,完成對分庫分表后數據的操作

(1)創建實體類,mapper

clipboard

4、配置sharding-jdbc的分片策略

(1)在項目的配置文件中進行配置

#sharding-jdbc 分片策略
# 數據源名稱,多數據源以逗號分隔
spring.shardingsphere.datasource.names=m1

#配置數據源的詳細信息
# 數據庫連接池
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource  
#數據庫驅動類名
spring.shardingsphere.datasource.m1.driver-class-name= com.mysql.cj.jdbc.Driver
# 數據庫 URL 連接
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
# 數據庫用戶名
spring.shardingsphere.datasource.m1.username= root
# 數據庫密碼
spring.shardingsphere.datasource.m1.password=houchen

# 指定course表的分布情況,配置在哪個數據庫,表名稱是什么  m1.course_1  m1.course_2
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m1.course_$->{1..2}

#指定course表中主鍵的生成策略  SNOWFLAKE:雪花算法,隨機生成主鍵Id
spring.shardingsphere.sharding.tables..course.key-generator.column= = cid
spring.shardingsphere.sharding.tables..course.key-generator.type= =SNOWFLAKE

# 指定分片的策略 約定cid值 : 偶數--》course_1  奇數-->course_2
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column= cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid%2 +1}

#打開sql的輸出日志
spring.shardingsphere.props.sql.show = true

 

5、編寫測試代碼

@RunWith(SpringRunner.class)
@SpringBootTest
public class ShardingJdbcDdemoApplicationTest {

    @Autowired
    private CourseMapper courseMapper;

    @Test
    public void testInsert(){
        Course course =new Course();
        course.setCname("java");
        course.setUserId(100L);
        course.setCstatus("normal");
        courseMapper.insert(course);
    }

}

 

clipboard


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM