专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序员小灰  ·  BOSS直聘又崩了? ·  3 天前  
程序员的那些事  ·  微信大大大批功能来袭,“老朋友”回归了 ·  昨天  
51CTO官微  ·  鸿蒙+AI,共建智慧园区2.0 ·  昨天  
码农翻身  ·  11w*14薪,进DeepSeek了! ·  2 天前  
51好读  ›  专栏  ›  OSC开源社区

JFinal 3.1 发布,没有繁琐、没有复杂,只有妙不可言

OSC开源社区  · 公众号  · 程序员  · 2017-05-06 08:31

正文

# 点击图片报名上海、南京源创会 #


JFinal 3.1 针对 3.0 版推出的魔板引擎进行了深度打磨,例如魔板 parse 异常提示更加友好明确,消除指令嵌套时多出来的一个换行符,对于模板 isModified() 逻辑进行了重构,消除冗余代码,可读性更好。


除了对魔板引擎深度打磨之外,也不乏推出了一些极简实用的功能,匠心打磨的 JFinal 3.1 在这一个月的俱乐部内测时间里,小伙伴们的一致感言是:妙不可言!



1、sql 模板分页:没有 Handler、没有 Mapper、没有各种 Tag,只有妙不可言


JFinal 3.1 sql 管理模块,给小伙伴们带来极简的分页设计,只需要一条用于查询的 sql 便可极速打完收枪:

#sql("findGirl")
select * from girl where age > #para(0)
#end


在 java 端的代码依然简洁到极致:

paginate(1, 10, getSqlPara("findGirl", 18));


传统 mybatis 这一类的sql 管理功能,为了实现分页还要额外做很多事情,例如,需要 Handler 或 Interceptor 扩展,需要Mapper、XML、annotation,又或者引入各种所谓的 Tag,不仅无聊,而且麻烦。



2、魔板函数:没有 macro、没有 layout、没有 tag,只有妙不可言


JFinal 魔板函数,消灭掉了传统模板引擎中大量无聊的概念,令学习成本无限逼近于0,函数是在任何现代语言都有的概念,用函数去实现类似于 layout 这样的功能就像呼吸空气一样地自由,只需 define 一个 layout() 函数,在此函数中调用另一个函数即可:

#define layout()


#@main()

#end


然后在最终的页面,直接调用 layout() 并定义 main() 函数:

#@layout()
#define main()...
#end


魔板函数是在 jfinal 3.0 时就有的功能,在此再次强调其易用性与灵活性,很多小伙伴使用 define 封装了各种可用于模块化的函数,jfinal 3.1 版的关键词 “妙不可言” 也是在这种情况下产生的,感谢 @天蓬小猪 第一个在俱乐部提出该关键词,以致于成为了 jfinal 3.1 的版本代号。



3、render 动态渲染:支持无限参数赋值,支持模块化


render 指令支持动态模板渲染,为其在运行时传入不同的模板,极速支持子模板的动态化定制,无限参数赋值极其有利于模块化,例如:如下名为 ”_hot_list.html” 的模板文件用于展示热门项目、热门新闻等等列表:


#(title)





上面html片段中的title、list、url是渲染时需要的变量,使用render指令分别渲染“热门项目”与“热门新闻”的用法如下:

#render("_hot_list.html", title="热门项目", list=projectList, url="/project")
#render("_hot_list.html", title="热门新闻", list=newsList, url="/news")


上面两行代码中,为“_hot_list.html”中用到的三个变量title、list、url分别传入了不同的值,实现了 “_hot_list.html”的模块化重用。此外,include 指令也添加了无限参数赋值功能特性。



4、sql 管理添加对 Object... paras 参数的支持


JFinal 3.0 的 sql 管理功能需要传入 Map data 参数:

Kv para = Kv.by("age", 18).set("weight", 50);
SqlPara sp = dao.getSqlPara("findGirl", para);


而大部分情况下还可以更加简洁、极速,以下是 JFinal 3.1 引入的新用法:

SqlPara sp = dao.getSqlPara("findGril", 18, 50);


新用法完全避免掉了参数的构造,sql 定义只需要使用 para指令的 #para(int) 形式即可:

#sql("findGirl")
select * from girl where age > #para(0) and weight #end


新用法为 para 指令提供 int 型参数达成参数传递,适用于参数位置与个数确定的场景。而老用法更加适用于参数名称、个数、位置都不确定的场景,多数情况下使用第一种用法即可胜任。



5、date 日期型数据输出指令


date指令用于格式化输出日期型数据,包括Date、Timestamp等一切继承自Date类的对象的输出,
使用方式极其简单:

#date(account.createAt)
#date(account.createAt, "yyyy-MM-dd HH:mm:ss")


上面的第一行代码只有一个参数,那么会按照默认日期格式进行输出,默认日期格式为:“yyyy-MM-dd HH:mm”。上面第二行代码则会按第二个参数指定的格式进行输出。


如果希望改变默认输出格式,只需要通过engine.setDatePattern()进行配置即可。此指令在 jfinal 3.0 中已经存在,但jfinal 手册中遗漏了其说明,有不少小伙伴们经常问,借本次新版本发布强调一下该功能的使用。



6、Kv 参数快捷构建工具







请到「今天看啥」查看全文