要在Ruoyi框架中使用Sharding JDBC按照月份自动添加分表,可以按照以下步骤操作:

  1. 在pom.xml文件中添加Sharding JDBC的依赖:
<dependency>
    <groupId>io.shardingsphere</groupId>
    <artifactId>sharding-jdbc-core</artifactId>
    <version>${sharding-jdbc.version}</version>
</dependency>
  1. 在application.yml文件中配置Sharding JDBC的数据源和分片规则:
spring:
  shardingsphere:
    datasource:
      names: ds0
      ds0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.jdbc.Driver
        jdbcUrl: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
        username: root
        password: root
    sharding:
      tables:
        user:
          actual-data-nodes: ds0.user_${2019..2020..1}
          table-strategy:
            inline:
              sharding-column: create_time
              algorithm-expression: user_${new java.text.SimpleDateFormat("yyyy_MM").format(new java.util.Date(Long.parseLong(String.valueOf(create_time))))}
          key-generator:
            type: SNOWFLAKE
            column: user_id
      default-database-strategy:
        inline:
          sharding-column: create_time
          algorithm-expression: ds0.user_${new java.text.SimpleDateFormat("yyyy_MM").format(new java.util.Date(Long.parseLong(String.valueOf(create_time))))}
      props:
        sql.show: true

其中,actual-data-nodes表示实际的数据节点,table-strategy表示分表策略,key-generator表示主键生成策略,default-database-strategy表示默认数据库策略,props中的sql.show表示是否显示SQL语句。

  1. 在代码中使用Sharding JDBC查询数据:
@Autowired
private DataSource dataSource;

@Test
public void testSelect() throws SQLException {
    String sql = "SELECT * FROM user WHERE create_time BETWEEN ? AND ?";
    try (Connection conn = dataSource.getConnection();
         PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
        preparedStatement.setTimestamp(1, Timestamp.valueOf("2019-01-01 00:00:00"));
        preparedStatement.setTimestamp(2, Timestamp.valueOf("2019-12-31 23:59:59"));
        try (ResultSet rs = preparedStatement.executeQuery()) {
            while (rs.next()) {
                System.out.println(rs.getLong("user_id") + "-" + rs.getString("username") + "-" + rs.getTimestamp("create_time"));
            }
        }
    }
}

在这个例子中,我们查询2019年的用户数据,Sharding JDBC会自动路由到user_2019_xx表中查询数据。

注意,这里的create_time字段必须是时间类型,且在查询时必须使用Timestamp类型。如果要查询跨多个月份的数据,可以使用UNION ALL操作将多个查询结果合并

ruoyi框架使用sharding jdbc按照月份自动添加分表

原文地址: https://www.cveoy.top/t/topic/dxD6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录