2018-04-09 15:35

直接调用 model 上的方法来赋值即可:model.setXxx(...)

enjoy 的表达式与 java 是直接打通的

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:04

顺便提一下现在 jfinal 中的 findByCache 这类设计时的想法:
1:用户使用 findByCache 可以在底层用 ehcache 缓存
2:而 ehcache.xml 可以针对 cache 配置缓存失效、替换等策略,人为干预少
3:用户可以明确使用 CacheKit.remove(key) 随时移除 cache

对于读多写少的互联网项目,配置 ehcache.xml 来控制下失效,在 remove、update 等业务方法里头调用一下 CacheKit.remove(...) 即可,这种方式用起来最简单明了,对 jfinal 内部没有性能影响

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-09 10:02

斜杠字符一个个增加或减少试一下,因为 enjoy 引擎自身也使用 "\" 字符作为转义字符,而后端 java 也使用了 "\" 为转义字符

应该是要再多加一个,改成: split("\\\.")

此外,要将异常贴出来,方便排错

2018-04-08 17:03

精细化的缓存 + 自动化缓存更新不是这么容易就做好的,你给的方案是针对于特定项目的,如果要做个 ORM 框架内部的 cache,容易出很多问题

做的话也不是没有可能,复杂度、性能都要做取舍,此外,缓存是做到业务层还是 ORM 层还有很多问题要考虑

暂时先不做这个

2018-04-08 16:58

@yjjdick1990 这个不仅是索引失效的问题这么简单,3 万条数据索引失败也不至于这么慢,这里慢就慢在 OR 条件引发的 30000 X 30000 的 30000 次全表扫描

2018-04-08 16:55

有不少同学问过这个问题,正好有需要,感谢你的分享

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

2018-04-08 14:26

String[] idArray = getParaValues();
String ids = Strkit.join(idArray, ",");
Db.update("delete from tableName where id in(" + ids + ")");

2018-04-08 14:23

这个 sql 造成了全表多次扫描,将 where 部分的两个 like 加上扩号:
WHERE l.mid=m.id and (m.nickname like '%设置%' or l.op like'%设置%') LIMIT 0,10

注意看上面的那对小扩号,这个是 sql 基础问题,sql 本身如果有性能问题肯定不在 jfinal 所能控制的范围内

你可以将这个 sql 直接在 mysql 控制台执行,照样耗时 10 分钟

2018-04-08 14:20

@qzm 在外层再套一个 select * from (原 sql) as temp 即可

2018-04-07 18:14

@215115704 在控制台看到微信回调你的项目输出 jfinal action report 为准则

2018-04-07 16:59

关键是要先搭好一个可供开发、调试的环境,这里有详细的办法:
https://gitee.com/jfinal/jfinal-weixin/wikis/JFinal%20weixin%20demo%E5%92%8C%E8%B0%83%E8%AF%95

调试环境弄好以后,请求到达你的程序,一步一步走,秒秒钟解决问题

当请求无法到达你的项目,就不要去折腾项目了,而是要先要去折腾从微信平台到你项目的这个通道