2016-09-08 13:37

@冰雨 补充一下前面的回复:model 中不要创建 dao 对象以后,将 dao 对象创建在 service 层中这样来:private static Xxx dao = new Xxx(); 记得是 private,这样就防止其它业务插手本业务的事情
收到了你的捐助,非常感谢你的支持

2016-09-08 12:58

@冰雨 这是个好问题,所以要点赞。收到点赞通知了吧,今天刚上的功能,用户体验感觉如何?

2016-09-08 12:40

jfinal 项目建议分为 MVCS 四层结构:
1:M 层用 jfinal 2.2 生成,model 中不要使用 static Xxx dao 这样的对象,避免新手误用,model 中只放一些与字段状态相关的方法,例如 User 这个 model 你可以针对 status 字段,放一个 public boolean isStatusOk() 这样的方法
2:V 层就是展现层,尽可能只去展现数据,避免复杂逻辑
3:C 是控制层,只负责得到前端参数,转调业务层,render。避免写业务逻辑,绝不可写数据库查询之类的代码
4:最最核心是 S 业务层,基本上来说, 95% 以上的代码要写在这里,只要是对数据库的操作代码也全部写在这里。如果业务层以外需要操作数据库,那么也要先在业务层去创建方法,然后再让业务层以外去转调这个业务层代码,这样可实现尽可能大的代码重用
5:事务控制,我个人习惯于使用 Db.tx(...) 来做,如果要用拦截器,建议使用业务层拦截器,控制层坚持只做我前面 3 中所说的事情
6:只在需要的时候使用接口、抽象类,业务层在绝大部分情况下不需要使用接口,直接是 XxxService.java 就可以了
jfinal 社区官网再完善一段时间会抽取出里面比较通用的功能开放出来,多多关注社区动态

2016-09-08 11:35

getBoolean("devMode",false); 后面的 false 是指,当配置文件中没有 devMode 这个配置的时候,就使用后面这个默认值: false。 理解成:当配置不存在时,给指定一个值

2016-09-08 10:29

参与开源,热心分享,不仅对别人有帮助,对自己也有帮助,是谓助人等于助已

2016-09-08 10:10

用 maven 的话,需要在 pom.xml 中添加相应的 dependency,不能采用添加 jar 包的方式,建议先学一学 maven 的基本使用

2016-09-08 10:05

所以说,jfinal 建议 json 的 keyName 也使用驼峰方式命名,就可以直接让jfinal 2.2 生成的 Model 直接被 fastjson 与 jackson 反序列化了。上次我发给你的那个 JFinalJson 与 FastJson 结合起来的例子还在不? 感谢分享,先赞一个 ^_^

2016-09-07 21:36

@chenwang 用一下 Db.execute(ICallback) 在 ICallback 接口的 call 方法中用 connection 对象调用存储过程。对于有些存储过程,使用一下 Db.update(...) 或者 Db.query(...) 也可以直接调用

2016-09-07 15:51

界面做得很专业啊, UI 也是你自己做的? 源代码能分享出来不,可以在项目频道发布出项目,起个好名字

2016-09-06 22:18

@冬眠的蛇 jfinal 社区介绍的资源还是很靠谱的,多多关注社区动态,社区将不遗余力地提供最优质的资源分享给大家

2016-09-06 18:03

可能是在连网情况下,会请求某些非本地的资源,而等待这个资源返回花了很长时间,断网情况下没有请求该资源,所以很快。检查一下是不是有数据库连接、socket 连接之类的外网请求

2016-09-06 17:31

做缓存没有很通用的方式,只能根据情况来做选择,但以上谈到的让 XxxService 统一管理 Xxx 的缓存是极重要的,其它的 YyyService 需要 Xxx 数据时,只能通过 XxxService 来获取,不能自己直接查库获取

2016-09-06 17:29

至于对于 delete 操作,可以是整体清掉 id list,也可以是在读二级缓存时,发现得到的是 null,此时就断定有数据被 delete,那么 id list 也需要重新查库

2016-09-06 17:28

@潇洒太爷 findByOther 可以是整个清掉缓存,这个属于大粒度使用缓存,还可以引入两级缓存,一级让这个 findByOther 只缓存 id 值的列表,如 List idList,通过列表再去二级缓存中去取具体的 model值,好处是不担心 update 操作,总是获取到最新的