1 快速上手

2 JFinalConfig

3 Controller

4 AOP

5 ActiveRecord

6 Enjoy 模板引擎

7 EhCachePlugin

8 RedisPlugin

9 Cron4jPlugin

10 Validator

11 国际化

12 Json 转换

13 JFinal架构及扩展

14 升级到 5.1.2

14.1 极速升级

一、jfinal 3.0 之前版本的升级

   jfinal 3.0 是大版本升级,此前版本升到 jfinal 3.0 请移步 14.2、14.3、14.4、14.5 小节,这几个小节中的内容极少,升级很方便。


二、jfinal 3.0 之后版本的升级

1、升级到 3.1

    无需修改,平滑升级


2、升级到 3.2

    IStringSource 更名为 ISource

    按照 14.2 小节 升级 Ret


3、升级到 3.3

    指令扩展中的 java.io.Writer 改为 com.jfinal.template.io.Writer,eclipse/IDEA 开发工具会主动给出提示


4、升级到 3.4

    由于 Json 中的 defaultDatePattern 初始值由 null 改为 "yyyy-MM-dd HH:mm:ss",JFinalJson 中删掉 datePattern 属性,所以要在 configConstant(Constants me) 中配置:me.setJsonDatePattern(null) 或者具体值


5、升级到 3.5

    ISource.getKey() 更名为 ISource.getCacheKey()


6、升级到 3.6

    Db、Model 针对多主键(联合主键)的 findById、deleteById 方法添加一个 's' 后缀,改成 findByIds、deleteByIds

    用到 jfinal weixin 项目的 MsgController 时,需要在 configRoutes 中配置 me.setMappingSuperClass(true)

     由于 jfinal 3.6 用于 sql 管理的 Engine 对象,默认配置了 engine.setToClassPathSourceFactory(),engine 将从 class path 和 jar 包中加载 sql 文件,所以如果 sql 文件以往是存放在 src/main/webapp 的需要转移至 src/main/resources 之下。如果以往配置过 arp.setBaseSqlTemplatePath(...),需要删除该行代码,或改为适应于 ClassPathSourceFactory 的配置,参考:https://www.jfinal.com/doc/6-2


7、升级到 3.8

    用到 Aop 配置方法的改为使用 AopManager,例如:Aop.addMapping(...) 改为 AopManager.me().addMapping(...) 


8、升级到 4.0

    无需修改,平滑升级


9、升级到 4.1

    无需修改,平滑升级


10、升级到 4.2

    无需修改,平滑升级


11、升级到 4.3

    无需修改,平滑升级


12、升级到 4.4

    无需修改,平滑升级


13、升级到 4.5

    默认不支持直接访问 .jsp 文件,如果需要直接访问 .jsp 文件,需添加配置:me.setDenyAccessJsp(false);


14、升级到 4.6

    无需修改,平滑升级


15、升级到 4.7

    无需修改,平滑升级


16、升级到 4.8

    jfinal 4.8 之前的 Controller.getPara(String) 方法,在有表单域存在的时候就不可能返回 null 值,而是返回了 "" 值。jfinal 4.8 版本将之修改为与其它 getXxx 系方法一样,将 "" 处理为 null 值。

   需要快速升级老项目的同学,可以引入 BaseController 并使用老版本的实现:

public class BaseController extends Controller {
   public String getPara(String name) {
      return getRequest().getParameter(name);
   }
}

  这个方法的具体改变细节见 gitee.com : https://gitee.com/jfinal/jfinal/commit/edfcc0015837ab0b1e6a1f980843ab88815ec1cd


17、升级到 4.9

    jfinal 4.9 对 JFinalJson.java 进行了重构,如果以前的项目通过继承 JFinalJson 类做过扩展,需要注意扩展接口有所变动,具体可以参考一下源码中有关扩展的注释,新的扩展接口使用起来比以前要方便得多。

   如果项目中使用了 fastjson,最低需要版本为 1.2.68(老版本的 fastjson 有安全隐患)。

   如无上述情况可平滑升级。


17、升级到 4.9.01

    无需修改,平滑升级


18、升级到 4.9.02

    Engine 的 setWriterBufferSize(int) 更名为 setBufferSize(int)


19、升级到 4.9.03

    无需修改,平滑升级


20、升级到 4.9.04

    无需修改,平滑升级。该版本只修正了 com.jfinal.plugin.redis.Cache.hgetCounter(...) 中的一个 bug。


21、升级到 4.9.05

    无需修改,平滑升级。该版本在 Model、Db 中新增了一个 each 方法,新增方法不影响升级


22、升级到 4.9.06

    该版本的 MetaBuilder.filter(...) 方法更名为 skip,使用逻辑没有变化。一般很少人用到这个方法,只有用到过这个方法的人才需要修改代码,并且 eclipse、IDEA 开发工具会提示修改。


23、升级到 4.9.07

    无需修改,平滑升级


24、升级到 4.9.08

    无需修改,平滑升级


25、升级到 4.9.09

    无需修改,平滑升级


26、升级到 4.9.10

    无需修改,平滑升级


27、升级到 4.9.11

    无需修改,平滑升级


28、升级到 4.9.12

    不要使用这个版本,模板生成内容会多出一些空行,请使用后续版本


29、升级到 4.9.13

    无需修改,平滑升级。

    但要注意:由于 PathKit.getWebRootPath() 方法已经被改进,在标准的 maven 项目中已经可以正确获取到 web 根目录,所以将该方法用于 model、base model 生成器的代码注意要改一下,可以将 PathKit.getWebRootPath() 改成下面方式获取项目根目录:

System.getProperty("user.dir")


30、升级到 4.9.14

    无需修改,平滑升级

31、升级到 4.9.15

    无需修改,平滑升级。注意跨多版本升级要看看升级到 4.9.13 这一小节。

32、升级到 4.9.16

    由于该版本升级了 Redis 插件所依赖的 jedis 与 fst,而 jedis 的 SafeEncoder 移动了目录,所以如果用到了 jfinal 的 Redis 插件的项目,需要将其 jedis 依赖升级到 3.6.3。

    如果你想升级 fst,需要注意升级前存入 redis 中的数据无法被读取,因为新版本 fst 序列化/反序列算法不兼容老版本,简单的解决办法是清空 redis 数据重新写入,如果不方便清空可以先不升级 fst 而只升级 jedis。

33、升级到 4.9.17

    无需修改,平滑升级。

34、升级到 4.9.18

    如果用到文件上传 cos 依赖必须升级到 2022.2 版本,因为 getFile 方法的 int maxPostSize 改成了 long。不建议使用该版本,建议至少升级到 4.9.21

注意:从本版本开始,后续版本文件上传依赖 cos 都要升级至少到 2022.2 版本(int maxPostSize 变量改为了 long 类型)

35、升级到 4.9.19

    无需修改,平滑升级。不建议使用该版本,建议至少升级到 4.9.21。

36、升级到 4.9.20

    Ret.create(Object,Object) 更名为 Ret.of(Object, Object),Ret.ok(Object, Object)、Ret.fail(Object, Object) 已被删除,可以使用 Ret.ok().set(Object, Object)、Ret.fail().set(Object, Object) 替代。不建议使用该版本,建议至少升级到 4.9.21。

37、升级到 4.9.21

    为保持兼容性,恢复了上一版本 4.9.20 中删掉的 Ret.ok(Object, Object)、Ret.fail(Object, Object) 两个方法。

    相对于 4.9.18 以及更早版本,升级到本版本,需要改变的是 Ret.create(key, value) 改为 Ret.of(key, value),以及 cos 升级到 2022.2,其它不用动。

注意:不建议使用 4.9.18、4.9.19、4.9.20,而是直接使用 4.9.21,因为该版本针对前面三个版本进行了完善并且兼容老项目,属于本轮迭代的最终版。

38、升级到 5.0.0

     无需修改,平滑升级。

39、升级到 5.0.1

     无需修改,平滑升级。

40、升级到 5.0.2

     Enjoy 模板引擎的静态方法调用与静态属性访问表达式默认值改为了 "不开启",如果用到这两类表达式,需要通过如下配置开启:

// 以下配置支持静态方法调用表达式:com.jfinal.kit.StrKit::isBlank('abc')
engine.setStaticMethodExpression(true);

// 以下配置支持静态属性访问表达式:com.jfinal.core.Constant::JFINAL_VERSION
engine.setStaticFieldExpression(true);

41、升级到 5.0.3

     无需修改,平滑升级。

42、升级到 5.0.4

     无需修改,平滑升级。

43、升级到 5.0.5

     无需修改,平滑升级。

44、升级到 5.0.6

     之前 5.0.3 版本 Redis 插件新增的分布式锁 lock(...)、withLock(...) 中的 timeOut 参数单位由 "毫秒" 改为了 "秒"。如果是 5.0.3 之前版本升级不必关心,因为5.0.3版本之前还未提供过这个方法。

45、升级到 5.0.7

     无需修改,平滑升级。

46、升级到 5.0.8

     无需修改,平滑升级。

47、升级到 5.0.8

     无需修改,平滑升级。

48、升级到 5.0.9

     无需修改,平滑升级。

49、升级到 5.1.0

     无需修改,平滑升级。

50、升级到 5.1.1

     无需修改,平滑升级。

51、升级到 5.1.2

     ScheduledKit 带有 Runnable/Callable 参数的方法其 Runnable/Callable 参数挪到了最后一个位置。