2018-04-09 16:15

@老高 这个 sql 是否正确呢? jfinal 只能保证 sql 是正确的,数据库来的结果是无法控制的

2018-04-09 16:11

@mld2024 @ALways昵称已被注册 很可能是 oracle 驱动的问题,升级试试

不建议手删,可以继承 MetaBuilder,覆盖掉父类的buildPrimaryKey(...) 方法,对于重复的主键值做一下清除

这个问题肯定是与 jfinal 无关的,jfinal 是从底层读的 meta 信息,mysql sqlserver 这些数据库都正常,oracle 也只碰到这一例有问题,jfinal 代码是同样一套

2018-04-09 16:08

配置一下: arp.setShowSql(true) 将 sql 输出到控制台,看 sql 对不对。 sql server 分页用了很多年了,一直是没问题的

升级下 sql server 驱动的 jar 包看看

2018-04-09 15:48

#(map_perm.two_list.get(#(x1.id))) 去掉 # 字符改成:
#(map_perm.two_list.get(x1.id))

参数中永远不要出现 # 符,除非是字符串中的#

# 字符是 enjoy 指令的起始字符,在参数中出现算是什么用法?

2018-04-09 15:43

@clfjava 难道是我记错了,居然是减少一个斜杠

从你的问题可以看出,你已掌握 jfinal enjoy 使用的精髓,enjoy 表达式当成 java 表达来用就好,让表达式的学习成本直接降到 0

2018-04-09 15:38

@caozijian form 表单设置: enctype="multipart/form-data"
input 域设置 name="fileUpload" 即可,注意 name 值的大小写

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

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