mirror of
https://gitee.com/ssssssss-team/magic-api.git
synced 2026-06-19 20:17:22 +08:00
调整匹配数据库方言的方式。
This commit is contained in:
@@ -4,10 +4,10 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.ssssssss.magicapi.dialect.*;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class DialectAdapter {
|
||||
|
||||
@@ -15,11 +15,6 @@ public class DialectAdapter {
|
||||
|
||||
private final List<Dialect> dialectList = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 缓存已解析的方言
|
||||
*/
|
||||
private final Map<String, Dialect> dialectMap = new ConcurrentHashMap<>();
|
||||
|
||||
public DialectAdapter() {
|
||||
add(new MySQLDialect());
|
||||
add(new OracleDialect());
|
||||
@@ -35,23 +30,19 @@ public class DialectAdapter {
|
||||
this.dialectList.add(dialect);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据库方言
|
||||
*/
|
||||
public Dialect getDialectFromUrl(String fromUrl) {
|
||||
Dialect cached = dialectMap.get(fromUrl);
|
||||
if (cached == null && !dialectMap.containsKey(fromUrl)) {
|
||||
for (Dialect dialect : dialectList) {
|
||||
if (dialect.match(fromUrl)) {
|
||||
cached = dialect;
|
||||
break;
|
||||
public Dialect getDialectFromConnection(Connection connection) {
|
||||
for (Dialect dialect : dialectList) {
|
||||
try {
|
||||
if (dialect.match(connection)) {
|
||||
return dialect;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
logger.debug("方言{}匹配失败", dialect, e);
|
||||
}
|
||||
if (cached == null) {
|
||||
logger.warn(String.format("magic-api在%s中无法获取dialect", fromUrl));
|
||||
}
|
||||
dialectMap.put(fromUrl, cached);
|
||||
}
|
||||
return cached;
|
||||
logger.warn("magic-api在{}中无法获取dialect", connection);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -213,7 +213,7 @@ public class MagicDynamicDataSource {
|
||||
Connection connection = null;
|
||||
try {
|
||||
connection = this.dataSource.getConnection();
|
||||
this.dialect = dialectAdapter.getDialectFromUrl(connection.getMetaData().getURL());
|
||||
this.dialect = dialectAdapter.getDialectFromConnection(connection);
|
||||
if (this.dialect == null) {
|
||||
throw new MagicAPIException("自动获取数据库方言失败");
|
||||
}
|
||||
|
||||
@@ -3,12 +3,24 @@ package org.ssssssss.magicapi.dialect;
|
||||
|
||||
import org.ssssssss.magicapi.modules.BoundSql;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
public interface Dialect {
|
||||
|
||||
/**
|
||||
* 根据jdbcUrl匹配
|
||||
*/
|
||||
boolean match(String jdbcUrl);
|
||||
default boolean match(String jdbcUrl){
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据Connection匹配
|
||||
*/
|
||||
default boolean match(Connection connection) throws SQLException {
|
||||
return match(connection.getMetaData().getURL());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取查总数的sql
|
||||
|
||||
Reference in New Issue
Block a user