public class MetaBuilder extends Object
| Modifier and Type | Field and Description |
|---|---|
protected Set<String> |
blacklist |
protected Connection |
conn |
protected DataSource |
dataSource |
protected DatabaseMetaData |
dbMeta |
protected Dialect |
dialect |
protected boolean |
fetchFieldAutoIncrement |
protected boolean |
generateRemarks |
protected boolean |
generateView |
protected String[] |
removedTableNamePrefixes |
protected java.util.function.Predicate<String> |
tableSkip |
protected TypeMapping |
typeMapping |
protected Set<String> |
whitelist |
| Constructor and Description |
|---|
MetaBuilder(DataSource dataSource) |
| Modifier and Type | Method and Description |
|---|---|
void |
addBlacklist(String... tableNames)
添加要排除的 tableName 到黑名单
|
void |
addExcludedTable(String... excludedTables) |
void |
addWhitelist(String... tableNames)
添加要生成的 tableName 到白名单
|
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 String |
handleJavaType(String typeStr,
ResultSetMetaData rsmd,
int column)
handleJavaType(...) 方法是用于处理 java 类型的回调方法,当 jfinal 默认
处理规则无法满足需求时,用户可以通过继承 MetaBuilder 并覆盖此方法定制自己的
类型转换规则
当前实现只处理了 Oracle 数据库的 NUMBER 类型,根据精度与小数位数转换成 Integer、
Long、BigDecimal。其它数据库直接返回原值 typeStr
Oracle 数据库 number 类型对应 java 类型:
1:如果不指定number的长度,或指定长度 n > 18
number 对应 java.math.BigDecimal
2:如果number的长度在10 <= n <= 18
number(n) 对应 java.lang.Long
3:如果number的长度在1 <= n <= 9
number(n) 对应 java.lang.Integer 类型
社区分享:《Oracle NUMBER 类型映射改进》https://jfinal.com/share/1145
|
protected boolean |
isSkipTable(String tableName)
通过继承并覆盖此方法,跳过一些不希望处理的 table,定制更加灵活的 table 过滤规则
|
void |
removeBlacklist(String tableName) |
protected void |
removeNoPrimaryKeyTable(List<TableMeta> ret) |
void |
removeWhitelist(String tableName) |
void |
setDialect(Dialect dialect) |
void |
setFetchFieldAutoIncrement(boolean fetchFieldAutoIncrement)
配置是否取出字段的自增属性
|
void |
setGenerateRemarks(boolean generateRemarks) |
void |
setGenerateView(boolean generateView) |
void |
setRemovedTableNamePrefixes(String... removedTableNamePrefixes)
设置需要被移除的表名前缀,仅用于生成 modelName 与 baseModelName
例如表名 "osc_account",移除前缀 "osc_" 后变为 "account"
|
void |
setTypeMapping(TypeMapping typeMapping) |
MetaBuilder |
skip(java.util.function.Predicate<String> tableSkip)
跳过不需要生成器处理的 table
由于 setMetaBuilder 将置换掉 MetaBuilder,所以 Generator.addExcludedTable(...)
需要放在 setMetaBuilder 之后调用,否则 addExcludedTable 将无效
示例:
Generator gen = new Generator(...);
gen.setMetaBuilder(new MetaBuilder(dataSource).skip(
tableName -> {
return tableName.startsWith("SYS_");
})
);
gen.addExcludedTable("error_log"); // 注意这行代码要放在上面的之后调用
gen.generate();
|
protected DataSource dataSource
protected Dialect dialect
protected java.util.function.Predicate<String> tableSkip
protected Connection conn
protected DatabaseMetaData dbMeta
protected String[] removedTableNamePrefixes
protected TypeMapping typeMapping
protected boolean generateRemarks
protected boolean generateView
protected boolean fetchFieldAutoIncrement
public MetaBuilder(DataSource dataSource)
public void setGenerateRemarks(boolean generateRemarks)
public void setGenerateView(boolean generateView)
public void setFetchFieldAutoIncrement(boolean fetchFieldAutoIncrement)
public void setDialect(Dialect dialect)
public void addWhitelist(String... tableNames)
public void removeWhitelist(String tableName)
public void addBlacklist(String... tableNames)
public void removeBlacklist(String tableName)
public void addExcludedTable(String... excludedTables)
public void setRemovedTableNamePrefixes(String... removedTableNamePrefixes)
public void setTypeMapping(TypeMapping typeMapping)
protected boolean isSkipTable(String tableName)
public MetaBuilder skip(java.util.function.Predicate<String> tableSkip)
protected String buildModelName(String tableName)
protected String buildBaseModelName(String modelName)
protected ResultSet getTablesResultSet() throws SQLException
SQLExceptionprotected void buildTableNames(List<TableMeta> ret) throws SQLException
SQLExceptionprotected void buildPrimaryKey(TableMeta tableMeta) throws SQLException
SQLExceptionprotected void buildColumnMetas(TableMeta tableMeta) throws SQLException
SQLExceptionprotected String handleJavaType(String typeStr, ResultSetMetaData rsmd, int column) throws SQLException
SQLExceptionCopyright © 2025. All rights reserved.