JFinal概述java
JFinal 是基於Java 語言的極速 web 開發框架,其核心設計目標是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展、Restful。在擁有Java語言全部優點的同時再擁有ruby、python等動態語言的開發效率。
JFinal發展概況python
JFinal 項目開發始於2011年初,做者詹波(James Zhan)曾任搜格信息技術有限公司Java架構師,北京信息管理科學研究所CTO,現任微格網際(北京)科技有限公司聯合創始人、網校網CTO。項目開源於2012年3月18日,採用對商業應用友好的Apache Licence 2.0協議。開源以來深受廣大開發者歡迎,目前採用JFinal框架開發的用戶羣迅速壯大,同時不乏一些已經上線的商業化互聯網項目。JFinal在中國最大的開源社區備受矚目,自開源以來一直是熱門項目。
JFinal將一直堅持如下設計目標:開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展、Restful。在堅持以上設計目標的同時,基於微內核+全方位擴展型架構,打造功能極度全面WEB+ORM開發框架。完全解放開發者的生產力,完全改善開發者的開發體驗,讓軟件開發成爲一件輕鬆愉快的事情。
JFinal經過實踐逐步造成了一套極速開發方法,此法將在即將打造的JFinal極速開發社區展現出來。
JFinal系統架構web
JFinal 採用微內核全方位擴展架構,全方位是指其擴展方式在空間上的表現形式。JFinal由Handler、Interceptor、Controller、Render、Plugin五大部分組成。
JFinal頂層架構圖以下:sql
JFinal架構十分簡單,頂層是一個AOP + 責任鏈模式變種,ActionHandler結構圖以下:數據庫
JFinal ActionHandler 內部結構也十分簡單,是一個AOP + Command模式變種。
特色後端
MVC架構,設計精巧,使用簡單
遵循COC原則,零配置,無xml
ActiveRecord支持,使數據庫開發極致快速
自動加載修改後的java文件,開發過程當中無需重啓web server
AOP支持,攔截器配置靈活,功能強大
Plugin體系結構,擴展性強
多視圖支持,支持FreeMarker、JSP、Velocity
強大的Validator後端校驗功能
功能齊全,擁有struts2的絕大部分功能
體積小僅218K,且無第三方依賴
JFinal WEB MVC和Struts簡要對比ruby
JFinal遵循COC原則,零配置,無xml,而struts須要配置來支持action、result、interceptor配置與使用。
JFinal開發效率很是之高,相對Struts開發效率能提高五到十倍。
JFinal代碼量很是省,相對Struts開發能省50%到70%代碼量。
JFinal遵循Restful規範,而struts自身未提供Restful支持。Struts能夠經過插件來支持restful,但支持不完全使用不方便。
JFinal提供數據庫支持,屬於一站式解決方案,而struts僅爲WEB MVC框架並未提供數據庫支持。
JFinal學習成本極低,只需兩個小時學習便可上手開發,而Struts學習成本相對較高。
JFinal相對Struts來講更加輕量級,JFinal打包jar文件僅173KB,而struts則爲1.8MB。
JFinal ORM和Hibernate簡要對比restful
JFinal採用ActiveRecord實現數據庫操做支持,較Hibernaet開發效率提高六到十倍。
JFinal ActiveRecord較Hibernate學習成本低,一小時內能上手開發。
JFinal零配置,對數據庫支持五個無特色:無xml、無annotation、無getter、無setter、無attribute,極大下降了代碼量,統計證明代碼量節省70%到95%。
JFinal數據庫操做徹底採用原生sql,相對Hibernate採用的HQL學習成本低,功能更強大,性能更高,穩定性好。架構
JFinal 中的Controller框架
Controller是JFinal核心類之一,該類做爲MVC模式中的控制器。基於JFinal的Web應用的控制器須要繼承該類。Controller是定義Action方法的地點,是組織Action的一種方式,一個Controller能夠包含多個Action。
如下是代碼示例:
public class HelloController extends Controller {
public void index() {
renderText("此方法是一個action");
}
public void test() {
renderText("此方法是一個action");
}
}
JFinal 中的Model
Model是ActiveRecord中最重要的組件之一,它充當MVC模式中的Model部分。如下是Model定義示例代碼:public class User extends Model<User> {public static final User dao= new User();}以上代碼中的User經過繼承Model,便當即擁有的衆多方便的操做數據庫的方法。在User中聲明的dao靜態對象是爲了方便查詢操做而定義的,該對象並非必須的。基於ActiveRecord的Model無需定義屬性,無需定義getter、setter方法,無需XML配置,無需Annotation配置,極大下降了代碼量。如下爲Model的一些常見用法:// 建立name屬性爲James,age屬性爲25的User對象並添加到數據庫new User().set("name", "James").set("age", 25).save();// 刪除id值爲25的UserUser.dao.deleteById(25);// 查詢id值爲25的User將其name屬性改成James並更新到數據庫User.dao.findById(25).set("name", "James").update();// 查詢id值爲25的user, 且僅僅取name與age兩個字段的值User user = User.dao.findById(25, "name, age");// 獲取user的name屬性String userName = user.getStr("name");// 獲取user的age屬性Integer userAge = user.getInt("age");// 查詢全部年齡大於18歲的userList<User> users = User.dao.find("select * from user where age>18");// 分頁查詢年齡大於18的user,當前頁號爲1,每頁10個userPage<User> userPage = User.dao.paginate(1, 10, "select *", "from user where age > ?", 18);