2018-04-09 12:16
@jflyx jfinal 3.4 对 oracle、sql server 等数据库的 "日期"、"时间" 类的类型做了全面增强,建议用上 jfinal 3.4,由于 jfinal 3.4 还未正式发布,可以使用这个贴子中的方法先用上:
http://www.jfinal.com/share/714
过几天 3.4 正式发布以后,改个版本号即可升级
2018-04-09 11:00
@yjjdick1990 我这里只说一个小的场景,可以思考一下怎么处理:
1:findByCache(key, sql, paras) 这个方法可以缓存查询到的 List 列表,假定 List 里头存放的是 Project 这个 Model
2:project.findById(123).setTitle("新title").update(); 更新某个 Project 对象的时候,应该如何去处理前面 findByCache 中缓存的 project,是让缓存失效,还是遍历 List 去更新
3:上面还只是假定一个 List,对于 Project 的缓存可能无处不在,jfinal 作为框架很难知道你用了什么 key 去缓存了什么 model
当然,也不是完全没有办法,可以将你缓存的 key 在底层自动给你添加上 model 的一些额外的 meta 信息,这样做复杂度提升了,而且你自己也无法通过 CacheKit.remove(...) 的方式很直白去移除 cache 了,性能也会因此带来比较大的影响
事务处理也是一个很大的问题,对于一般的类似于 BBS、Blog 类的项目还能还好点,但是 jfinal 作为框架要考虑的场景必然要包括企业级应用
总之,做是可以做的,但带来的问题也不少,目前 @玛雅牛 通过引入一个 BaseMode 来实现了一个比较好的自动化 cache 解决方案,也是有很多取舍的,可以参考一下
2018-04-09 10:05
@minions_JSF 我倒不建议直接说服,有些甲方其实什么也不懂,所以你说什么也没有用
俱乐部有几个小伙伴采用了我建议的办法:
1:先用 spring 搭好项目
2:弄点 spring 的 IOC 配置,例如数据源配置也用 spring 来做
3:在 web.xml 中添加 JFinalFilter 将 jfinal 整合进来,打完收工
如果还要做得周到点,可以适当再用一个 spring 的 controller、service、dao 走完一个小功能,其它功能全用 jfinal 实现
这样做的好处是,既保证了合同中要求的使用 spring,又可以享用 jfinal 开发的便利与快捷,一石二鸟。
开发合同里头通常只会限定你 “要用” 什么技术,而不会限定你 “不用” 什么技术,例如你的项目肯定要用到第三方:数据源连接、json 处理、日志等等
2018-04-08 16:58
@yjjdick1990 这个不仅是索引失效的问题这么简单,3 万条数据索引失败也不至于这么慢,这里慢就慢在 OR 条件引发的 30000 X 30000 的 30000 次全表扫描
2018-04-08 16:54
配置为 warn 或者 error 级别
如果仍然希望配置为 debug 级别,但不希望输出太多信息,可以让针对不同的类、不同的 packag 来设置更高的级别,类似于:
log4j.logger.org.hibernate.SQL=WARN
log4j.logger.org.apache=WARN
log4j.logger.org.apache.catalina=ERROR
log4j.logger.org.apache.commons=WARN
注意上面的 log4j.logger 这个前缀与你前面的配置有关,而这个前缀后面的下面这些东东才是真正被控制的 package 与 class
org.hibernate.SQL=WARN
org.apache=WARN
org.apache.catalina=ERROR
org.apache.commons=WARN