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