扩展MetaBuilder自定义生成表

新增SuperMetaBuilder中自定义属性及方法

protected Set<String> includeTables = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);

protected void addIncludeTable(String... includeTables){
    if (includeTables != null) {
        for (String table : includeTables) {
            this.includeTables.add(table);
        }
    }
}

重写MetaBuilder中的buildTableNames,原有的excludedTables和自定义的includeTables为互斥条件,代码如下

public class SuperMetaBuilder extends MetaBuilder {

	protected Set<String> includeTables = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
	
	public SuperMetaBuilder(DataSource dataSource) {
		super(dataSource);
	}

	protected void addIncludeTable(String... includeTables){
		if (includeTables != null) {
			for (String table : includeTables) {
				this.includeTables.add(table);
			}
		}
	} 
	
	@Override
	protected void buildTableNames(List<TableMeta> ret) throws SQLException {
		ResultSet rs = getTablesResultSet();
		while (rs.next()) {
			String tableName = rs.getString("TABLE_NAME");
			if(includeTables.isEmpty()) {
				if (excludedTables.contains(tableName)) {
					System.out.println("Skip table :" + tableName);
					continue ;
				}
				if (isSkipTable(tableName)) {
					System.out.println("Skip table :" + tableName);
					continue ;
				}
			}else {
				if(!includeTables.contains(tableName)) {
					System.out.println("Skip table :" + tableName);
					continue;
				}
			}
			TableMeta tableMeta = new TableMeta();
			tableMeta.name = tableName;
			tableMeta.remarks = rs.getString("REMARKS");
			
			tableMeta.modelName = buildModelName(tableName);
			tableMeta.baseModelName = buildBaseModelName(tableMeta.modelName);
			ret.add(tableMeta);
		}
		rs.close();
	}
}

生成器中可以增加

SuperMetaBuilder smb = new SuperMetaBuilder(getDataSource());
//或者不使用addIncludeTable方法includeTables为空,则excludedTables生效
smb.addIncludeTable("tb_aaa,tb_bbb"); 
generator.setMetaBuilder(smb);

灵活配置,可以包含所需表也可以排除不需要的表。生成更复杂的需求可以根据情况自己定制。

评论区

山东小木

2018-11-26 01:56

jbolt里也已经实现了可以单选 多选和全选表 然后根据过滤规则等条件 按需生成

沙发迪

2018-11-26 11:07

@山东小木 这个只是用代码生成而已

热门分享

扫码入社