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”
有用
有用
有用