public abstract class DBDialect extends Object implements IDBDialect
precision和scale
precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。
Modifier and Type | Field and Description |
---|---|
protected Case |
caseHandler
case Handler
|
protected Set<Feature> |
features
各种Boolean特性
|
protected Set<String> |
keywords
数据库关键字
|
protected char |
quoteChar |
Constructor and Description |
---|
DBDialect() |
Modifier and Type | Method and Description |
---|---|
void |
accept(Connection conn)
初始化方言,根据JDBC接口进一步嗅探出数据库版本和JDBC驱动信息,从而让方言更加适配数据库操作。
当有一个数据库实例连接初次创建时调用.
|
void |
addComment(Connection con,
TableMapping en) |
boolean |
containKeyword(String name)
检查数据库是否包含指定的关键字,用来进行检查的对象名称都是按照getColumnNameIncase转换后的,因此对于大小写统一的数据库,
这里无需考虑传入的大小写问题。
|
String |
createAddColumnSql(TableMapping en,
ColumnMapping mf) |
abstract boolean |
createEntity(Connection conn,
TableMapping en)
根据实体信息,返回某实体的建表语句
|
List<String> |
createIndexSql(TableMapping tm)
创建索引,一组(与hibernate保持一致)
|
protected List<String> |
createRelation(Connection conn,
ColumnMapping en) |
void |
createRelation(Connection conn,
TableMapping en) |
protected String |
createResultSetMetaSql(TableMapping en) |
List<String> |
createUniqueSql(TableMapping tm)
创建唯一约束,一组(与hibernate保持一致)
|
boolean |
dropEntity(Connection conn,
TableMapping en) |
void |
dropRelation(Connection conn,
TableMapping en) |
protected String |
escapeSqlValue(String value)
SQL 语句中的字符串值,默认编码单引号(')为双单引号(')
|
String |
evalFieldType(ColumnMapping mf) |
protected void |
execute(List<String> sqls,
Connection conn) |
protected boolean |
execute(String sql,
Connection conn) |
boolean |
existsTables(Connection conn,
String tableName)
该表是否存在
|
String |
getCatalog(String catalog)
像Oracle,其Catlog是不用的,那么返回null mySQL没有Schema,每个database是一个catlog,那么返回值
|
long |
getColumnAutoIncreamentValue(ColumnMapping mapping,
Connection db) |
static String |
getColumnDefinition(ColumnMapping mf) |
static int |
getColumnLength(ColumnMapping mf) |
String |
getColumnNameToUse(ColumnMapping column)
获得大小写正确的列名
|
static int |
getColumnPrecision(ColumnMapping mf) |
static int |
getColumnScale(ColumnMapping mf) |
String |
getDefaultSchema()
不同数据库登录后,所在的默认schema是不一样的
Oracle是以登录的用户名作为schema的。
mysql是只有catlog不区分schema的。
derby支持匿名访问,此时好像是位于APP这个schema下。
SQL Server默认是在dbo这个schema下
因此对于无法确定当前schema的场合,使用这里提供的schema名称作为当前schema |
String |
getDriverClass(String url)
获取数据库的默认驱动类
|
abstract String |
getHibernateDialect()
返回对应的 Hibernate 的 Dialect
|
List<String> |
getIndexNames(TableMapping en,
Connection conn) |
abstract String |
getName() |
String |
getNvlFunction(String val1,
String val2)
去除空值的判断方法
|
String |
getObjectNameToUse(String name)
Oracle会将所有未加引号的数据库对象名称都按照大写对象名来处理;MySQL则对表名一律转小写,列名则保留原来的大小写。
为了体现这一数据库策略的不同,这里处理大小写的问题。
|
protected String |
getPrimaryKeySql(String tablename,
List<String> pkColumnsEntity) |
String |
getProperty(DBProperty key) |
String |
getProperty(DBProperty key,
String defaultValue) |
int |
getPropertyInt(DBProperty key) |
long |
getPropertyLong(DBProperty key) |
char |
getQuoteChar() |
String |
getSchema(String schema)
对于表名前缀的XX.
|
String |
getSeqNextValSql(String seqName)
获取下一个序列值得sql语句
|
List<SequenceInfo> |
getSequenceInfo(Connection conn,
String schema,
String seqName) |
String |
getSqlStatmentSeparator()
批量运行多个SQL语句之间的分隔符。
|
protected static String |
gSQL(String ptn,
String table,
String field) |
boolean |
has(Feature feature)
判断数据库是否支持某项特性
|
boolean |
isCaseSensitive()
数据库对象是否为大小写敏感的
一般来说对应引号中的表名列名都是大小写敏感的。此处仅指没有引号的情况下是否大小写敏感
|
boolean |
notHas(Feature feature)
判断数据库是否不支持某项特性
|
protected void |
setProperty(DBProperty key,
String value) |
void |
setupEntityField(Connection conn,
TableMapping en)
设置tablemapping信息
|
abstract String |
sqlColumnAdd(String table,
String column_definition,
String column_position) |
abstract String |
sqlColumnDrop(String table,
String column) |
abstract String |
sqlColumnModify(String table,
String column_definition,
String column_position) |
String |
sqlPageList(String sql,
long offset,
int limit)
生成分页sql
|
abstract String |
sqlTableDrop(String table) |
abstract String |
sqlTableRename(String oldName,
String newName) |
boolean |
supportsColumnPosition()
是否支持在添加字段的时候,指定字段位置
|
abstract String |
uniqueSql(String tableName,
String name,
String[] columnNames)
生成unique 语句.
|
protected String |
unwrapper(String name)
去除包含的符号和getQuotedIdentifier相反
|
String |
wrapKeyword(Connection conn,
String name)
将字段名/表名与SQL保留字冲突的名称进行 Wrapper
|
String |
wrapKeyword(String name)
将字段名/表名与SQL保留字冲突的名称进行 Wrapper
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getJooqDialect, getQueryDslDialect
protected Case caseHandler
protected char quoteChar
public String getObjectNameToUse(String name)
IDBDialect
目前的原则是:凡是涉及
schema/table/view/sequence/dbname等转换的,都是用此方法,凡是涉及列名转换,列别名定义的都用
IDBDialect.getColumnNameToUse(sf.database.meta.ColumnMapping)
方法
getObjectNameToUse
in interface IDBDialect
public String getColumnNameToUse(ColumnMapping column)
IDBDialect
getColumnNameToUse
in interface IDBDialect
public String getCatalog(String catalog)
getCatalog
in interface IDBDialect
catalog
- public String getSchema(String schema)
IDBDialect
getSchema
in interface IDBDialect
public String getDriverClass(String url)
IDBDialect
getDriverClass
in interface IDBDialect
url
- Derby根据连接方式的不同,会有两种不同的DriverClass,因此需要传入urlpublic String getDefaultSchema()
IDBDialect
getDefaultSchema
in interface IDBDialect
public void accept(Connection conn)
IDBDialect
accept
in interface IDBDialect
public boolean isCaseSensitive()
IDBDialect
isCaseSensitive
in interface IDBDialect
protected void setProperty(DBProperty key, String value)
public String getProperty(DBProperty key)
public String getProperty(DBProperty key, String defaultValue)
public int getPropertyInt(DBProperty key)
public long getPropertyLong(DBProperty key)
public abstract String getName()
getName
in interface IDBDialect
RDBMS
public abstract String getHibernateDialect()
public boolean supportsColumnPosition()
public final String wrapKeyword(String name)
name
- public final String wrapKeyword(Connection conn, String name)
conn
- 为解决mysql标识符可以为:"或`的问题(无用).name
- protected String unwrapper(String name)
name
- public String getSqlStatmentSeparator()
public abstract String sqlColumnAdd(String table, String column_definition, String column_position)
public abstract String sqlColumnModify(String table, String column_definition, String column_position)
public List<SequenceInfo> getSequenceInfo(Connection conn, String schema, String seqName) throws SQLException
SQLException
public String getSeqNextValSql(String seqName)
seqName
- 序列名称public boolean notHas(Feature feature)
IDBDialect
notHas
in interface IDBDialect
public boolean has(Feature feature)
IDBDialect
has
in interface IDBDialect
public String sqlPageList(String sql, long offset, int limit)
sql
- 原始sqloffset
- 开始位置,从0开始 (= (Page-1)*PageSize)limit
- 返回的限制大小(= 分页大小 PageSize)protected String createResultSetMetaSql(TableMapping en)
public boolean containKeyword(String name)
IDBDialect
containKeyword
in interface IDBDialect
public void setupEntityField(Connection conn, TableMapping en)
conn
- en
- public abstract boolean createEntity(Connection conn, TableMapping en)
en
- 实体public String evalFieldType(ColumnMapping mf)
public boolean dropEntity(Connection conn, TableMapping en)
public void createRelation(Connection conn, TableMapping en)
protected List<String> createRelation(Connection conn, ColumnMapping en)
public void dropRelation(Connection conn, TableMapping en)
public boolean existsTables(Connection conn, String tableName)
conn
- tableName
- public List<String> createIndexSql(TableMapping tm)
tm
- public final List<String> createUniqueSql(TableMapping tm)
tm
- public abstract String uniqueSql(String tableName, String name, String[] columnNames)
tableName
- 表名name
- 名称columnNames
- 表的列名,public void addComment(Connection con, TableMapping en)
public static int getColumnLength(ColumnMapping mf)
public static int getColumnPrecision(ColumnMapping mf)
public static int getColumnScale(ColumnMapping mf)
public static String getColumnDefinition(ColumnMapping mf)
public String createAddColumnSql(TableMapping en, ColumnMapping mf)
public List<String> getIndexNames(TableMapping en, Connection conn) throws SQLException
SQLException
protected boolean execute(String sql, Connection conn)
protected void execute(List<String> sqls, Connection conn)
public long getColumnAutoIncreamentValue(ColumnMapping mapping, Connection db)
getColumnAutoIncreamentValue
in interface IDBDialect
public char getQuoteChar()
Copyright © 2020. All rights reserved.