2019-02-06 09:45

在dbutil中添加静态代码块,初始化active插件,不是更简单吗

2017-11-23 11:53

@JFinal MappingKitGenerator中的
@Override
protected void genMappingMethod(List tableMetas, StringBuilder ret) 这个方法没有了,还有一些类变量不在了,比如:mappingMethodDefineTemplate、compositeKeyTemplate
BaseModelGenerator中的 genSetMethodName 和genGetMethodName 去掉了。
看了一下3.3的源码,已经改成模板引擎实现了,我研究一下,多谢詹总了,手册已收到!

2017-11-23 10:59

我也遇到了,如果你的数据库实例有多个用户,他们存在相同的表,比如每个用户对应一套测试环境,就会有这个问题。我是新建一个MappingKitGenerator的子类:
/**
* JFinal自带的MappingKitGenerator,当一个库下有多个用户,表结构相同时,生成的主键也会重复(比如资源测试环境有resxj30和resxj30a)
*
*/
public class ResMappingKitGenerator extends MappingKitGenerator {

protected String mappingNoPkMethodContentTemplate
= "\t\tarp.addMapping(\"%s\", %s.class);%n";

public ResMappingKitGenerator(String mappingKitPackageName, String mappingKitOutputDir) {
super(mappingKitPackageName, mappingKitOutputDir);
}

@Override
protected void genMappingMethod(List tableMetas, StringBuilder ret) {
ret.append(String.format(mappingMethodDefineTemplate));
for (TableMeta tableMeta : tableMetas) {
boolean isCompositPrimaryKey = tableMeta.primaryKey.contains(",");
if (isCompositPrimaryKey) {
String[] pks = tableMeta.primaryKey.split(",");
Set set = new TreeSet();
set.addAll(Arrays.asList(pks));
String rmRepeatPks = "";
for (String pk : set) {
rmRepeatPks += "," + pk;
}
tableMeta.primaryKey = rmRepeatPks.substring(1);
if (set.size() > 1) {
ret.append(String.format(compositeKeyTemplate, tableMeta.primaryKey));
}
}
String add;
if (StrKit.isBlank(tableMeta.primaryKey)) {
add = String.format(mappingNoPkMethodContentTemplate, tableMeta.name, tableMeta.modelName);
} else {
add = String.format(mappingMethodContentTemplate, tableMeta.name, tableMeta.primaryKey, tableMeta.modelName);
}
ret.append(add);
}
ret.append(String.format("\t}%n"));
}
}

不过这个代码再jfinal3.3下已经编译报错了。。

2017-11-23 10:52

我也遇到同样的问题,我的方法是:
//原MetaBuilder会生成所有的表,修改为指定的表(ResMetaBuilder自己的类)
gernerator.setMetaBuilder(new ResMetaBuilder(getDataSource()));
//----------------
public class ResMetaBuilder extends MetaBuilder {

public ResMetaBuilder(DataSource ds) {
super(ds);
}

@Override
protected ResultSet getTablesResultSet() throws SQLException {
String sql = "select table_name,'' REMARKS from user_tables where table_name in('table1','table2')";
PreparedStatement ps = conn.prepareStatement(sql);
return ps.executeQuery();
}

}

2016-11-20 23:38

@zempty 说道我心坎了,看到所有的dao、service都加个impl就够够的

2016-11-20 23:35

很不习惯sql与代码分离的方式,查看业务逻辑要在几个文件里跳来跳去,不明白有什么好,除了产品要支持多数据库的情况