JFinal 1.9 針對(duì)開發(fā)者最為關(guān)注的功能有20多項(xiàng)增強(qiáng)及改進(jìn)。除了提供配置文件的全局支持外,還加強(qiáng)了在移動(dòng)互聯(lián)網(wǎng)時(shí)代對(duì)JFinal作為服務(wù)端及客戶端的支持,例如XmlRender、JsonRender可極度方便地開發(fā)Xml、Json服務(wù)端程序,HttpKit可以極簡(jiǎn)地與類似于微信公眾平臺(tái)的API進(jìn)行通信。除了功能性的增強(qiáng)以外,還對(duì)代碼進(jìn)行了優(yōu)化與精簡(jiǎn),更輕、更快、更爽 ^_^
JFinal有如下主要特點(diǎn):
MVC架構(gòu),設(shè)計(jì)精巧,使用簡(jiǎn)單
遵循COC原則,零配置,無(wú)xml
獨(dú)創(chuàng)Db + Record模式,靈活便利
ActiveRecord支持,使數(shù)據(jù)庫(kù)開發(fā)極致快速
自動(dòng)加載修改后的java文件,開發(fā)過(guò)程中無(wú)需重啟web server
AOP支持,攔截器配置靈活,功能強(qiáng)大
Plugin體系結(jié)構(gòu),擴(kuò)展性強(qiáng)
多視圖支持,支持FreeMarker、JSP、Velocity
強(qiáng)大的Validator后端校驗(yàn)功能
功能齊全,擁有struts2的絕大部分功能
體積小僅248K,且無(wú)第三方依賴
jfinal 小例子
了解jfinal的結(jié)構(gòu)和特點(diǎn)
先上圖
1、建數(shù)據(jù)庫(kù)(我用的是oracle數(shù)據(jù)庫(kù),其他的相對(duì)也差不多)
-- Create tablecreate table CLASSES
(
classesid NUMBER not null,
classesname VARCHAR2(20),
classesaddress VARCHAR2(50)
);-- Create tablecreate table STUDENT
(
studentid NUMBER not null,
studentname VARCHAR2(10),
studentage NUMBER,
studentsex VARCHAR2(2),
classesid NUMBER);alter table STUDENT add constraint FK_CLASSESID foreign key (CLASSESID) references CLASSES (CLASSESID);
新建項(xiàng)目,我用的myeclipse,先把jar包導(dǎo)入
2、實(shí)體類
Classes.java
package com.demo.model;import com.jfinal.plugin.activerecord.Model;public class Classes extends Model<Classes> { public static final Classes dao = new Classes();
}
Student.java
package com.demo.model;import com.jfinal.plugin.activerecord.Model;public class Student extends Model<Student> { public static final Student dao = new Student(); public Classes getClasses() { return Classes.dao.findById(get("classesid"));
}
}
什么這是實(shí)體類?
沒錯(cuò)!!~ ActiveRecord 是 jfinal 最核心的組成部分之一,通過(guò) ActiveRecord 來(lái)操作數(shù)據(jù)庫(kù),將極大地減少代碼量,極大地提升開發(fā)效率,配置在后面,我這里用的是Model,Model 是 ActiveRecord 中最重要的組件之一,它充當(dāng) MVC 模式中的 Model部分。
以上代碼中的 User 通過(guò)繼承 Model,便立即擁有的眾多方便的操作數(shù)據(jù)庫(kù)的方法。在 User 中聲明的 dao 靜態(tài)對(duì)象是為了方便查詢操作而定義的,該對(duì)象并不是必須的。 基于ActiveRecord 的 Model 無(wú)需定義屬性, 無(wú)需定義 getter、 setter方法,無(wú)需 XML 配置,無(wú)需 Annotation 配置,極大降低了代碼量。Model常見方法見官方API。
JFinal還有 獨(dú)創(chuàng) Db + Record 模式,Db 類及其配套的 Record 類, 提供了在 Model 類之外更為豐富的數(shù)據(jù)庫(kù)操作功能。使用 Db 與 Record 類時(shí),無(wú)需對(duì)數(shù)據(jù)庫(kù)表進(jìn)行映射,Record 相當(dāng)于一個(gè)通用的 Model。Db常見方法見官方API。
JFinal 1.9 changelog
1:添加PropKit、Prop方便全局使用配置,配置文件加載默認(rèn)目錄改為類路徑之下,符合maven習(xí)慣
2:增強(qiáng)jsp之下的jstl的EL輸出,添加ModelRecordElResolver,JspRender.isSupportActiveRecord默認(rèn)值改為false,默認(rèn)使用EL增強(qiáng)
3:添加HttpKit及EncryptionKit方便與第三方API進(jìn)行通信與加密,便于開發(fā)微信公眾號(hào)這類項(xiàng)目
4:添加Controller.renderXml(String)方便開發(fā)xml服務(wù)端項(xiàng)目
5:增強(qiáng)FileRender,文件下載支持多線程下載以及斷點(diǎn)續(xù)傳功能
6:改進(jìn)DbPro.tx()與Tx攔截器事務(wù)功能,添加對(duì)拋出Error時(shí)的回滾,增強(qiáng)事務(wù)安全
7:優(yōu)化ActionHandler對(duì)靜態(tài)資源判斷性能,支持對(duì)拋出Error時(shí)寫日志,方便jvm當(dāng)?shù)魰r(shí)排查錯(cuò)誤
8:提升Oracle在表數(shù)據(jù)量極大時(shí)ARP初始化性能,OracleDialect.forTableBuilderDoBuild()中sql條件改為rownum<1,fillStatement()添加對(duì)Timestamp的判斷
9:優(yōu)化JsonRender,添加JsonRender.addExcludeAttrs()方法,可以排除renderJson()時(shí)不想轉(zhuǎn)換為json的屬性,默認(rèn)已經(jīng)排除tomcat開啟SSL后自動(dòng)生成的屬性,方便tomcat支持SSL
10:優(yōu)化 StrKit.firstCharToLowerCase、firstCharToUpperCase,性能提升 2.1 倍
11:增強(qiáng)HandlerKit,添加renderError404(),方便在Handler中使用404頁(yè)面進(jìn)行渲染
12:增強(qiáng)FakeStaticHandler,支持對(duì)非偽靜態(tài)action請(qǐng)求的過(guò)濾
13:精簡(jiǎn)JFinalConfig與配置加載、讀取有關(guān)代碼
14:ICallback.run()更名為call()
15:開放Table.getColumnTypeMap()方便開發(fā)者擴(kuò)展ARP功能,并使其返回的map為只讀確保安全
16:添加Controller.renderText(String, ContentType)方便各種Content Type的text渲染
17:添加com.jfinal.plugin.activerecord.OrderedFieldContainerFactory 類,方便開發(fā)數(shù)據(jù)庫(kù)查詢工具項(xiàng)目,以便model中的屬性迭代輸出順序與sql select后的字段次序保持一致
18:優(yōu)化DruidPlugin,driverClass 默認(rèn)值改為 null,以便讓新版本Druid自動(dòng)探測(cè)該值
19:改進(jìn)EhCachePlugin,添加RenderInfo、RenderType解決對(duì)render對(duì)象緩存時(shí)線程安全問(wèn)題
20:優(yōu)化SessionInViewInterceptor,跳過(guò)處理JsonRender提升性能
21:支持Controller內(nèi)public無(wú)參方法成為非action,添加com.jfinal.ext.interceptor.NotAction,通常用于在攔截器中需要控制器提供public無(wú)參方法的場(chǎng)景
22:優(yōu)化JsonKit,listToJson、mapToJson方法可見性改為private,對(duì)這些方法有依賴的代碼可改為調(diào)用toJson()方法
23:優(yōu)化Render,去掉對(duì)Serializable接口的實(shí)現(xiàn),刪除所有Render繼承類中的transient關(guān)鍵字以及serialVersionUID屬性
文件清單及使用說(shuō)明
1:jfinal-1.9-bin.jar
開發(fā) jfinal 項(xiàng)目唯一必須的 jar 包,其它所有 jar 包都不是必須的
2:jfinal-1.9-src.zip
jfinal 1.9 源代碼
3:jfinal-1.9-bin-with-src.jar
jfinal 1.9 開發(fā)包 + 源碼 的整合,方便非 maven 開發(fā)者在開發(fā)時(shí)調(diào)試和查看源碼,從而不用再單獨(dú)綁定 jfinal-1.9-src.zip 就可以在 IDE 中查看源碼
4:jetty-server-8.1.8.jar
jetty-server-8.1.8.jar 用來(lái)支持無(wú)需額外安裝 tomcat jetty 等 web server
即可開始開發(fā),同時(shí)它也是支持熱部署的必要包。特別注意在使用tomcat開發(fā)或部署時(shí)需要去掉 jetty-server-8.1.8.jar 包,以免引起沖突
5:jfinal-1.9-lib 目錄下所有 jar 包
為開發(fā)者準(zhǔn)備的常用且可能用到的 jar 包,方便非 maven 用戶取用。詳情請(qǐng)見 jfinal-1.9-lib 目錄下的說(shuō)明文件:“jfinal-1.9-庫(kù)文件依賴及使用說(shuō)明.txt”
您的評(píng)論需要經(jīng)過(guò)審核才能顯示
有用
有用
有用