关键词:发布

JFinal4

  • 时间:
  • 浏览:5

JFinal 4.9 发布,不断精雕细刻

    JFinal 是一个 Web MVC ORM AOP Template Engine 四合一的简约、极轻量运用开发框架,迄今已迭代更新发展趋势进到第 10 年。

    JFinal 坚持不懈极简设计,迭代更新近 10 年,却仅有 3 万行编码,比传统式的同样作用组成类架构要少几十倍的编码量,这促使开发人员能够 彻底操控其源码,也变成学习培训 java 架构设计方案的极佳資源。

    历经这些年的迭代更新,JFinal 早已十分健全、完善。JFinal 4.9 关键打磨抛光了近几个月来开发人员的要求与意见反馈,很大的雕刻有下边这种:

1、重新构建、提升内置的 json 变换控制模块

    JFinalJson 控制模块被再次设计方案,基本检测,特性提高至 jackson 的 3 倍之上。而且加上了一些便捷的作用,以下配备能够 打开将 Model、Record 字段转成把力文件格式:

JFinalJson.setModelAndRecordFieldNameToCamelCase();

    很多开发人员将数据库查询字段取名成下横线的文件格式,如:"user_id",这就导致了与 java 变量名设计风格的不统一,对编码品质有一定危害。

    所述配备仅有在遇到下横线时才会对其开展变换,不然原状保存,而 oracle 客户习惯性应用英文大写的字段,因此必须应用以下配备:

JFinalJson.setModelAndRecordFieldNameConverter(fieldName -> { return StrKit.toCamelCase(fieldName, true);});

    所述编码中的第二个主要参数 true 表明将字段转成小写字母,而不管是不是出現下横线。

    增加 addToJson 可便捷地特定随意种类的转换规则:

JFinalJson.addToJson(Timestamp.class, (value, depth, ret) -> { ret.addLong(((Timestamp)value).getTime());});

    之上拓展编码,将 Timestamp 类型转换成 long 值。

    增加 setSkipNullValueField 方式,用以除去 null 值字段名的变换:

JFinalJson.setSkipNullValueField(true);

2、Enjoy 模板引擎加上 HTML 缩小作用

    根据以下配备可打开该作用:

engine.setCompressorOn();

    打开该作用之后,3D渲染出去的 html 結果以下:

    该作用针对极高高并发浏览的 web 运用会出现好处,节省总流量、提高高效率。

3、Enjoy 模板引擎加上 addEnum 方式适用枚举类型

    伴随着很多客户针对 Enjoy 应用的深层次,愈来愈多的同学们向我了解枚举类型的适用难题。该作用实际上能够 根据 addSharedObject(...) 来完成。

    因为问的人过多,为防止将来反复回应该难题,也以便进一步提高开发设计感受,jfinal 4.9 给与了立即适用,假设有以下枚举类型:

public enum UserType { ADMIN, USER; public String hello() { return "hello"; }}

    加上一行配备就可以适用该枚举类型:

engine.addEnum(UserType.class);

    Enjoy 模版中就可以像下边那样应用:

### 下列的目标 u 根据 Controller 中的 setAttr("u", UserType.ADMIN) 传送#if(u == UserType.ADMIN)    #(UserType.ADMIN)    ### 下列二行编码演试立即方式启用    #(UserType.ADMIN.name())    #(UserType.ADMIN.hello())   #end

     在模版中的使用方法与在 java 中的使用方法维持一致性,竭尽全力地给你降低学习培训成本费。

4、Enjoy 的 Ctrl 加上 attachment 特性

    Ctrl 加上了 Object attachment 以及 setter、getter 方式,有利于透过 Scope 传送自变量,关键用以命令拓展当中:

public class MyDirective extends Directive { public void exec(Env env, Scope scope, Writer writer) { // 获得种类为 Box 的 attachment,Box 能够 是随意种类,在这里仅为演试 Box box = scope.getCtrl().getAttachment(); // 从 box 中读取数据,或是向里边放进数据信息 String xxx = box.getXxx(); stat.exec(env, scope, writer); }}

    该自变量的优势之一是透过 Scope 传送主要参数,优势之二是防止了应用 Scope 传参时对客户数据信息将会的环境污染。

    比如出現同名的自变量矛盾  attachment 数据信息能够 是在某一命令当中建立并传送,还可以是在 Template.render(...) 时建立,案例见事后。

5、Enjoy 的 Template 加上四个带上 Func 插口的 render 方式

    这种新加上的方式用以适用更深层的拓展。

    开发人员能够 在 render 以前对接 Template 中的 Stat ast、Env env、Scope scope 自变量,而且有利于向 Ctrl 传到 attachment 主要参数:   

Map data = new HashMap<>();data.put("key", 123);String ret = template.renderToString(data, (ast, env, scope, writer) -> { // 能够 传到随意种类的 attachment 主要参数,下列以 Kv 目标为例子 // 该主要参数能够 在命令中根据 scope.getCtrl().getAttachment() 获得 scope.getCtrl().setAttachment(Kv.by("key", 456)); // 对接內部的 ast、env、scope、writer,实行 ast.exec(...) ast.exec(env, scope, writer);});System.out.println(ret);

    之上编码,运用 Func 主要参数能够 让开发人员触碰到 Template 內部的 Stat、Env、Scope、Writer 数据信息,那样就为更深层地拓展出示了无限潜能。

    实际到上例,其向 Ctrl 中传到了一个 Kv 目标做为 attachment,该目标将透过 Scope 直通全部命令。

    就算 JFinal 已打磨抛光很多年,4.9 版本号依然有 30 多种提高与改善。剩余的一些改善是一些开发人员无需太关心的內部提升类的,为节省大伙儿時间在这里没有过多阐释,很感兴趣的同学们能够 去 jfinal 官网首页右边免费下载详细信息的 changelog:https://jfinal.com

    最终,借此机会 4.9 版发布之时,谢谢 jfinal 俱乐部队全部同学们这几年的适用,你的适用将是 jfinal 可持续发展观的强悍驱动力。

猜你喜欢