public class MetaBuilder extends Object
Modifier and Type | Field and Description |
---|---|
protected Connection |
conn |
protected DataSource |
dataSource |
protected DatabaseMetaData |
dbMeta |
protected Dialect |
dialect |
protected Set<String> |
excludedTables |
protected String[] |
removedTableNamePrefixes |
protected TypeMapping |
typeMapping |
Constructor and Description |
---|
MetaBuilder(DataSource dataSource) |
Modifier and Type | Method and Description |
---|---|
void |
addExcludedTable(String... excludedTables) |
List<TableMeta> |
build() |
protected String |
buildAttrName(String colName)
构造 colName 所对应的 attrName,mysql 数据库建议使用小写字段名或者驼峰字段名
Oralce 反射将得到大写字段名,所以不建议使用驼峰命名,建议使用下划线分隔单词命名法
|
protected String |
buildBaseModelName(String modelName)
使用 modelName 构建 baseModelName
|
protected void |
buildColumnMetas(TableMeta tableMeta)
文档参考:
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-type-conversions.html
JDBC 与时间有关类型转换规则,mysql 类型到 java 类型如下对应关系:
DATE java.sql.Date
DATETIME java.sql.Timestamp
TIMESTAMP[(M)] java.sql.Timestamp
TIME java.sql.Time
对数据库的 DATE、DATETIME、TIMESTAMP、TIME 四种类型注入 new java.util.Date()对象保存到库以后可以达到“秒精度”
为了便捷性,getter、setter 方法中对上述四种字段类型采用 java.util.Date,可通过定制 TypeMapping 改变此映射规则
|
protected String |
buildModelName(String tableName)
构造 modelName,mysql 的 tableName 建议使用小写字母,多单词表名使用下划线分隔,不建议使用驼峰命名
oracle 之下的 tableName 建议使用下划线分隔多单词名,无论 mysql还是 oralce,tableName 都不建议使用驼峰命名
|
protected void |
buildPrimaryKey(TableMeta tableMeta) |
protected void |
buildTableNames(List<TableMeta> ret) |
protected ResultSet |
getTablesResultSet()
不同数据库 dbMeta.getTables(...) 的 schemaPattern 参数意义不同
1:oracle 数据库这个参数代表 dbMeta.getUserName()
2:postgresql 数据库中需要在 jdbcUrl中配置 schemaPatter,例如:
jdbc:postgresql://localhost:15432/djpt?currentSchema=public,sys,app
最后的参数就是搜索schema的顺序,DruidPlugin 下测试成功
3:开发者若在其它库中发现工作不正常,可通过继承 MetaBuilder并覆盖此方法来实现功能
|
protected boolean |
isSkipTable(String tableName)
通过继承并覆盖此方法,跳过一些不希望处理的 table,定制更加灵活的 table 过滤规则
|
void |
setDialect(Dialect dialect) |
void |
setRemovedTableNamePrefixes(String... removedTableNamePrefixes)
设置需要被移除的表名前缀,仅用于生成 modelName 与 baseModelName
例如表名 "osc_account",移除前缀 "osc_" 后变为 "account"
|
void |
setTypeMapping(TypeMapping typeMapping) |
protected DataSource dataSource
protected Dialect dialect
protected Connection conn
protected DatabaseMetaData dbMeta
protected String[] removedTableNamePrefixes
protected TypeMapping typeMapping
public MetaBuilder(DataSource dataSource)
public void setDialect(Dialect dialect)
public void addExcludedTable(String... excludedTables)
public void setRemovedTableNamePrefixes(String... removedTableNamePrefixes)
public void setTypeMapping(TypeMapping typeMapping)
protected boolean isSkipTable(String tableName)
protected String buildModelName(String tableName)
protected String buildBaseModelName(String modelName)
protected ResultSet getTablesResultSet() throws SQLException
SQLException
protected void buildTableNames(List<TableMeta> ret) throws SQLException
SQLException
protected void buildPrimaryKey(TableMeta tableMeta) throws SQLException
SQLException
protected void buildColumnMetas(TableMeta tableMeta) throws SQLException
SQLException
Copyright © 2018. All rights reserved.