在之前的博客中,我们写过简单的Dialect,实现每种数据库不同的分页需求。
但是没有正式讨论,这个平台如何更好的适配多种数据库类型。
今天,我们就讲下这个课题。
以下,未完待续!!!
扩展方式:default 方法平滑演进
未来新增方言能力时,建议在 Dialect 接口中用 default 方法扩展,不破坏现有实现:
java
public interface Dialect {
// ==================== 分页(现有) ====================
String getPagedSql(String originalSql, int offset, int limit);
// ==================== 批量插入(未来扩展) ====================
default String getBatchInsertSql(String tableName, List<String> columns, int batchSize) {
throw new UnsupportedOperationException(
getDatabaseProductName() + " 暂不支持批量插入语句生成");
}
// ==================== UPSERT(未来扩展) ====================
default String getUpsertSql(String tableName, List<String> columns, List<String> keyColumns) {
throw new UnsupportedOperationException(
getDatabaseProductName() + " 暂不支持 UPSERT 语句生成");
}
// ==================== 标识符转义(现有 default) ====================
default String quoteIdentifier(String identifier) {
return getIdentifierQuote() + identifier + getIdentifierQuote();
}
}
这样,已有三种基准方言无需任何修改,未来需要批量插入时再逐个实现即可。这个边界划分,是这套多数据库适配方案能长期演进的关键。