Skip to content

一个实体适配多种数据库

需求

当我们做产品的时候,客户现场是什么数据库经常是不受我们控制的,因此我们的实体需要能适配多种数据库,比如某个字段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;
}