ORM框架现在都支持动态表操作,满足分库分表的场景 下面针对使用的两种常用框架mybtis和Hibernate
一、mybtis
1、方式一
本例子使用:tk- mybaits,其他mybatis应该同理,有待测试
引入jar
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
//版本看情况自选
<version>2.0.4</version>
</dependency>
单表
表名和数据库一致,如若不指定,自动将类名驼峰转下划线
@Table(name="market_cap")
public class MarketCap{
}
动态表
关键在于实现IDynamicTableName的getDynamicTableName方法
tableName为非表内字段,由程序动态设置即可
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RtsMarketCap implements IDynamicTableName {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private BigDecimal marketCap;
private BigDecimal marketCapChange;
//....忽略字段
@Transient
private String tableName;
@Override
public String getDynamicTableName() {
return tableName;
}
}
1、方式二
利用@Select注解(通理xml配置一样)传惨的方式,将表明传入
@Select("select * from ${table} where col1 = #{v1}")
JSONObject query(@Param("v1") String v1, @Param("table") String table);
二、Hibernate
JPA本身便支持@Table动态注入#,$注入都是可以的
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "#{nftscanBlockChainData.blockChain}" + "_rt_day")
@Builder
public class RtsMarketCap {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private BigDecimal marketCap;
private BigDecimal marketCapChange;
//....忽略字段
}