Config
Config 配置。
constant 常量。
public Routes add(String controllerKey, Class extends Controller> controllerClass, String viewPath): 第一个参数controllerKey是指访问某个Controller所需要的一个字符串,该字符串唯一对应一个Controller,controllerKey仅能定位到Controller。第二个参数controllerClass是该controllerKey所对应到的Controller。第三个参数viewPath是指该Controller返回的视图的相对路径(该参数具体细节将在Controller相关章节中给出)。当viewPath未指定时默认值为controllerKey。
plugin 插件。
Interceptor 全局拦截器。
PropKit工具栏 读取外部键值对配置文件。
controller
controller MVC模式中的控制器,定义action方法的地点。
在Controller之中定义的public方法称为Action。
getPara 从请求中获取参数。
getModel:用来接收页面表单域传递过来的model对象(与attName与数据表字段名完全一样)
getBean:用于支持传统的java Bean
setAttr 将各种数据传递给View并在View中显示出来。
renderFile 文件下载。
setSessionAttr(key, value):向session中存放数据
getSessionAttr(key):向session中读取数据
getSession() 得到session对象从而使用全面的session API
render系列方法将渲染不同类型的视图并返回给客户端。
JFinal AOP
三个概念:Interceptor、Before、Clear,并且无需引入IOC也无需使用啰嗦的XML。
Interceptor: 对方法进行拦截,并提供机会在方法的前后添加切面代码,实现AOP的核心目标。
在web开发中,拦截器是经常用到的功能。它可以帮我们验证是否登陆、预先设置数据以及统计方法的执行效率等等。
拦截器从上到下依次分为Global、Inject、Class、Method四个层次
Interceptor接口仅仅定了一个方法void intercept(Invocation inv)
Before:注解用来对拦截器进行配置,该注解可配置Class、Method级别的拦截器
Clear: 用于清除自身所处层次以上层的拦截器。
Interceptor的触发: 控制层拦截器的触发,只需发起action请求即可。业务层拦截器的触发需要先使用enhance方法对目标对象进行增强,然后调用目标方法即可。
Enhancer、Duang: 用来对目标进行增强,让其拥有AOP的能力。
ActiveRecord
ActiveRecord: 操作数据库
一个 Model 对象唯一对应数据库表中的一条记录,而对应关系依靠的是数据库表的主键值。
ActiveRecordPlugin: ActiveRecord是作为JFinal的Plugin而存在的,使用时需要在JFinalConfig中配置ActiveRecordPlugin。
Model: 它充当MVC模式中的Model部分。通过继承Model,便立即拥有的众多方便的操作数据库的方法。
Generator: Generator 工具类,可自动生成 Model、BaseModel、pingKit、DataDictionary 四类文件。 生成后的 Model 与 java bean 合体,立即拥有了传统 JavaBean 所有的优势,开发过程中不再需要记忆字段名。 使用生成器通常只需配置Generator的四个参数即可
pingKit: 生成table到Model的映射关系,并且会生成主键/复合主键的配置
独创Db + Record模式: Db类及其配套的Record类,提供了在Model类之外更为丰富的数据库操作功能。使用Db与Record类时,无需对数据库表进行映射,Record相当于一个通用的Model。
paginate分页:
声明式事务需要使用ActiveRecordPlugin提供的拦截器来实现
enchace:ActiveRecord 可以使用缓存以大大提高性能,默认的缓存实现是 ehcache,使用时需要引入 ehcache 的 jar 包及其配置文件。
Dialect: 多数据库支持
表关联操作: 一是直接使用sql得到关联数据;二是在Model中添加获取关联数据的方法。
复合主键// 多数据源的配置仅仅是如下第二个参数指定一次复合主键名称
arp.addMapping("user_role", "userId, roleId", UserRole.class);
Oracl
#para : 生成 sql 中的问号占位符以及问号占位符所对应的参数值,两者分别保存在 SqlPara对象的 sql 和 paraList 属性之中。
#para指令支持两种用法:
一种是传入 int型常量参数的用法,
#sql("findGirl")
select * from girl where age > #para(0) and weight < #para(1)
#end
另一种用法是传入除了 int 型常量以外的任意类型参数。
#sql("findGirl")
select * from girl where age > #para(age) and weight < #para(weight)
#end
#namespace: sql 语句指定命名空间,不同的命名空间可以让#sql指令使用相同的key值去定义sql,有利于模块化管理。
多数据源支持
Template Engine(模板引擎)
是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
Template Engine: 一是在模板中可以直接与 java 代码通畅地交互,二是尽可能沿用 java 语法规则。剩下来只有 #if、#for、#define、#set、#include、#(...) 六个指令需要了解。
引擎配置:
1.如果模板中通过 #define 指令定义了 template function,并且希望这些 template function 可以在其它模板中直接调用的话,可以进行如下配置:
// 添加共享函数,随后可在任意地方调用这些共享函数
me.addSharedFunction("/view/common/layout.html");
通过上面的配置,可以在任意地方直接调用 layout.html 里头的 template function。
定义表达式的最实用场景是在调用方法或函数时提供极为灵活的参数传递方式,当方法或函数需要传递的参数名与数量不确定时极为有用
指令:
1、输出指令#( )
2、#if 指令:if指令需要一个cond表达式作为参数,并且以#end为结尾符
3、#for 指令
4、#set 指令: 声明变量同时对其赋值
5、#include 指令:
一。将外部模板内容包含进来,被包含的内容会被解析成为当前模板中的一部分进行使用
二。支持传入无限数量的赋值表达式,对于模块化非常有好处
6、#render 指令: ender指令在使用上与include指令几乎一样,同样也支持无限量传入赋值表达式参数
render指令支持动态化模板参数,例如:#render(temp),这里的temp可以是任意表达式,而#include指令只能使用字符串常量:#include(“abc.html”)
render指令中#define定义的模板函数只在其子模板中有效,在父模板中无效,这样设计非常有利于模块化
7、#define 指令: #define指令是模板引擎主要的扩展方式之一,define指令可以定义模板函数(Template Function)。通过define指令,可以将需要被重用的模板片段定义成一个个的 template function,在调用的时候可以通过传入参数实现千变万化的功能。
9、#date 指令: 格式化输出日期型数据。
#date(account.createAt, "yyyy-MM-dd HH:mm:ss")
10、#number 指令: 格式化输出数字型数据
注释#
原样输出#[[]]#
Shared Object: 将某个具体对象添加为共享对象,可以全局进行使用
Extension Method: 对已存在的类在其外部添加扩展方法
Spring整合:
1、maven 坐标:
Spring 整合JFinal Template Engine 可以在pom.xml中配置jfinal坐标,也可以配置JFinal Template Engine的独立发布版本坐标
2、Spring MVC整合:只需要配置一个bean即可:
class="com.jfinal.template.ext.spring.JFinalViewResolver">
3、Spring Boot整合
EhCachePlugin
EhCachePlugin: JFinal集成的缓存插件,通过使用EhCachePlugin可以提高系统的并发访问速度。
CacheInterceptor: 将action所需数据全部缓存起来,下次请求到来时如果cache存在则直接使用数据并render,而不会去调用action。此用法可使action完全不受cache相关代码所污染,即插即用,
EvictInterceptor: 根据CacheName注解自动清除缓存.
Validator
Validator是JFinal校验组件,Validator自身实现了Interceptor接口,所以它也是一个拦截器,配置方式与拦截器完全一样
generator: