2019-06-03 10:01

A 注入 B,B 注入 C , C 再注入 A ,这样就形成了循环注入,jfinal 对这种情况是完美处理,没多注入一层,也没少注入一层

此处的 ThreadLocal 仅用于检测循环注入的发生

最极端的循环注入是:A 注入 B,B 注入 A

你使用这种最极端的情况单步调试一下 jfinal 的这段代码,自然就清楚其原理了

2019-06-02 17:04

@April761 record.getInt("file_id") record.getStr("name");

反馈错发到了分享频道,这个贴子随后会被删除,请知悉

2019-06-02 15:59

将 sql 写好即可:
Db.find("select file_name, fiel_id from xxx where id = ?", 123);

2019-06-02 15:53

这是高手

2019-06-02 09:40

分页的问题一定要仔细看文档:
https://www.jfinal.com/doc/5-6

文档里头分析了所有可能出错的情况,甚至讲了分页原理

2019-06-02 09:00

@it1728166827 对这六个回调方法做成可配置的,这个方案很久以前确实考虑过,考虑到学习成本问题,还是没采用,一般来说让 configPlugin 的次序变成可配置的,其它是固定的,使用上没有多少问题

如果让所有的回调都可以配置次序,也会引发问题,例如 configRoute 中要用到 configInterceptor 中配置的全局拦截器,所以必须要有一个先后关系

2019-06-02 08:58

java.sql.Date 类型也是可以有时、分、秒的, 是否具有时、分、秒与类型关系不大,只与你的变量中是不是真的有时、分、秒数据有关

可以通过指定 date pattern 来输出一个 java.sql.Date 来验证我前面所说

因此,解决这个问题的最简单办法是直接使用 getDate(...)

这里注意一个基本问题:jfinal 是不干预从数据库过来数据的类型的,你碰到的这个 java.sql.Date 是底层 JDBC 转化的结果

2019-06-01 22:35

解决办法是在 configConstant(Constants me) 中配置一下:
me.setConfigPluginOrder(1);

这个次序的调整在俱乐部群里的 jfinal-4.1-changelog.txt 中有说明:
是为了让 configRoute 中配置的 routes 级拦截器可以用上 configInterceptor 中配置的全局拦截器

2019-06-01 22:28

@dxan 插入数据、删除数据,在此统一抽象为更新操作

2019-06-01 17:44

insert into 这类 sql 要使用 Db.update(sql) 不能使用 Db.find(sql)

前者用于更新数据库,后者用于查询,两者有本质区别

2019-06-01 17:40

demo 中使用的 DruidPlugin 就是在用 druid 这个连接池,这方面不需要自己操心

2019-06-01 17:39

此外,参数不要拼接在 sql 中,既不方便,也有 sql 注入的危险

要这么来用:
String sql = "insert into students(id, name, age, sex, remark) values (?, ?, ?, ?, ?)";
Db.update(sql, 145, "asdjh", 6, "男", "无");

2019-06-01 17:37

用于更新的 sql 怎么能使用 Db.find(sql) 呢?

要使用 Db.update(sql);

2019-06-01 17:36

jfinal 高版本是 JDK 8 起步, JDK 8 有很多重要功能,性能也更高,并且是 LTS 版本,还在使用 1.6、1.7 的项目值得升级