JFinal

登录 注册
  • @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)

    关键在于自我改动无法发布,其他人的环境无法使用,不知道波总能不能优美的实现此功能
    03-25 10:14 回复
  • @123456798 undertow.txt中undertow.devMode=false,或者删掉这个配置,默认就是false
    03-22 16:05 回复
  • idea?老版本idea遇到过一样的问题,要么升级idea,要么关掉undertow的开发模式
    03-22 15:16 回复
  • response的流不能重复读取,你可以排查是否先后调用了多个render,因为一般render里面会对response的输出流进行操作。或者你自己在intercepter或handller里是否有对输出流进行操作,包括getWriter等方法。
    03-15 14:42 回复
  • @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在生成字典时的读取顺序,更改为正确的前后顺序后,未继续出现该问题。
    03-15 14:39 回复
  • 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();
    03-15 11:23 回复
  • @张红军 2018.3.5,就是最新版本那个,我更新了这个版本就没出过问题了@小白菜111
    03-15 10:34 回复
  • 集成完全没问题的,注释涉及到事务的话,spring的代码代码很难复用,要用jfinal重写
    03-04 15:16 回复
  • 目测跟我遇到的问题一致,升级idea即可解决
    03-04 15:13 回复
  • @JFinal 好的,正常情况下确实不会出现问题,手动加麻烦,我们一般都不会加
    02-28 11:59 回复