2019-03-26 10:06

@1659811173 辞职吧,跟着这样的经理不会有前途的

2019-03-26 09:36

model跟baseModel生成就行了,controller生成来干什么

2019-03-26 09:35

@JFinal 还原了,不想改源码,不方便下次升级

2019-03-25 10:14

@jfinal
自己试着实现了下,做出来了,效果非常非常好,只是jfinal需要小改几处源码,也不知道改的合不合适:
1、com.jfinal.plugin.activerecord.Table类中的setColumnTypeMap方法需要改成public修饰;
2、com.jfinal.plugin.activerecord.DbKit类中的addModelToConfigMapping方法需要改成public修饰;
3、com.jfinal.plugin.activerecord.ActiveRecordPlugin类中的start方法注释掉第228行
//new TableBuilder().build(tableList, config);
4、自定义MappingKit模板,加入相关逻辑
package #(mappingKitPackageName);

import cn.zcltd.c.ant.dao.*;
import com.jfinal.plugin.activerecord.*;

import java.util.HashMap;
import java.util.Map;

/**
* Generated by JFinal, do not modify this file.
*


* Example:
* public void configPlugin(Plugins me) {
* ActiveRecordPlugin arp = new ActiveRecordPlugin(...);
* #(mappingKitClassName).mapping(arp);
* me.add(arp);
* }
*

*/
public class #(mappingKitClassName) {

public static void mapping(ActiveRecordPlugin arp) {
Config config = arp.getConfig();
JavaType javaType = new JavaType();
TableMapping tableMapping = TableMapping.me();
Table table;
Map> tableColumnTypeMap;
#for (tableMeta : tableMetas)

#if (tableMeta.primaryKey.contains(","))
// Composite Primary Key order: #(tableMeta.primaryKey)
#end
arp.addMapping("#(tableMeta.name)", "#(tableMeta.primaryKey)", #(tableMeta.modelName).class);
table = new Table("#(tableMeta.name)", "#(tableMeta.primaryKey)", #(tableMeta.modelName).class);
tableColumnTypeMap = new HashMap<>();
#for (columnMeta : tableMeta.columnMetas)
tableColumnTypeMap.put("#(columnMeta.name)", javaType.getType("#(columnMeta.javaType)"));
#end
table.setColumnTypeMap(tableColumnTypeMap);
tableMapping.putTable(table);
DbKit.addModelToConfigMapping(table.getModelClass(), config);
#end
}
}


改造完后,测试结果如下(启动3次以上取平均值,run、debug模式差不不大):
空白项目 改造前10秒(10.2、10.6、9.8) 改造后3秒(3.2、3.1、2.9)
当前项目 114张表 改造前12秒(11.3、12.6、13.4) 改造后6秒(最快4.8、6.1、6.2)

关键在于自我改动无法发布,其他人的环境无法使用,不知道波总能不能优美的实现此功能

2019-03-22 16:05

@123456798 undertow.txt中undertow.devMode=false,或者删掉这个配置,默认就是false

2019-03-22 15:16

idea?老版本idea遇到过一样的问题,要么升级idea,要么关掉undertow的开发模式

2019-03-15 14:42

response的流不能重复读取,你可以排查是否先后调用了多个render,因为一般render里面会对response的输出流进行操作。或者你自己在intercepter或handller里是否有对输出流进行操作,包括getWriter等方法。

2019-03-15 14:39

@jfinal
该问题已解决,最终问题为dbMeta.getColumns方法拿到的结果,在oracle下ResultSet读取时,若通过rs.getXXX("key")的方式取值,原则上需要跟返回结果的字段先后顺序一致,当field1在field2之前,而取值时已经读取了field2,再读取field1时,就会出错。但经测试,该原则并不稳定,部分字段的前后顺序不会引发问题,部分前后顺序会引发问题,具体场景还需进一步研究或查阅相关文档。以下为jdk8的顺序:
TABLE_CAT
TABLE_SCHEM
TABLE_NAME
1 COLUMN_NAME
DATA_TYPE
2 TYPE_NAME
3 COLUMN_SIZE
BUFFER_LENGTH
4 DECIMAL_DIGITS
7 REMARKS
6 COLUMN_DEF
SQL_DATA_TYPE
SQL_DATETIME_SUB
CHAR_OCTET_LENGTH
ORDINAL_POSITION
5 IS_NULLABLE
SCOPE_CATALOG
SCOPE_SCHEMA
SCOPE_TABLE
SOURCE_DATA_TYPE
IS_AUTOINCREMENT
IS_GENERATEDCOLUMN

标了数字的为jfinal在生成字典时的读取顺序,更改为正确的前后顺序后,未继续出现该问题。

2019-03-15 11:23

JfinalContext.init();

DataSource dataSource = DbKit.getConfig().getDataSource();

String basePath = System.getProperty("user.dir") + "/src/main/java/com/axinfu/tyfp_bs";
String basePkg = "com.axinfu.tyfp_bs";

String baseModelPackageName = basePkg + ".model";
String baseModelOutputDir = basePath + "/model";

String modelPackageName = basePkg + ".dao";
String modelOutputDir = basePath + "/dao";

String mappingPackageName = basePkg;
String mappingOutputDir = basePath;

BaseModelGenerator myBaseModelGenerator = new BaseModelGenerator(baseModelPackageName, baseModelOutputDir);
myBaseModelGenerator.setTemplate("gen/model.e");

ModelGenerator modelGenerator = new ModelGenerator(modelPackageName, baseModelPackageName, modelOutputDir);
modelGenerator.setTemplate("gen/dao.e");

MappingKitGenerator mappingKitGenerator = new MappingKitGenerator(mappingPackageName, mappingOutputDir);
mappingKitGenerator.setTemplate("gen/mapping_kit.e");
mappingKitGenerator.setMappingKitClassName("_MappingKit");

Generator gernerator = new Generator(dataSource, myBaseModelGenerator, modelGenerator);
gernerator.setMappingKitGenerator(mappingKitGenerator);

gernerator.setMetaBuilder(new MetaBuilder(dataSource) {
@Override
protected boolean isSkipTable(String tableName) {
return !tableName.startsWith("FNE_");
}
});

gernerator.setDialect(new OracleDialect());
gernerator.setGenerateDaoInModel(true);
gernerator.setGenerateDataDictionary(true);
//gernerator.setRemovedTableNamePrefixes("t_");

gernerator.generate();

2019-02-28 11:59

@JFinal 好的,正常情况下确实不会出现问题,手动加麻烦,我们一般都不会加