一个实体适配多种数据库
需求
当我们做产品的时候,客户现场是什么数据库经常是不受我们控制的,因此我们的实体需要能适配多种数据库,比如某个字段MySQL、Pgsql下表现不同。
实现
核心思路:
使用@AutoColumn注解的dialect属性,指定数据库,声明该注解仅生效于指定的数据库(dialect默认为空字符串,表示所有数据库都生效)。
PS:如果需要同时指定多个@AutoColumn注解,则需要使用@AutoColumns注解包裹,生效的规则是:外层优先于内层,前面优先于后面。
java
public class TestTable {
@ColumnComment("姓名")
@AutoColumn(length = 300, dialect = DatabaseDialect.MYSQL) // 仅针对Mysql
private String name;
@ColumnComment("备注")
@AutoColumns({ // 当数据库是非 MySQL、PostgreSQL时,使用框架默认映射规则
@AutoColumn(type = MysqlTypeConstant.LONGTEXT, dialect = DatabaseDialect.Mysql), // 当数据库是 MySQL时,使用LONGTEXT
@AutoColumn(type = PgsqlTypeConstant.TEXT, dialect = DatabaseDialect.Pgsql) // 当数据库是 PostgreSQL时,使用TEXT
})
private String remark;
}