2019-06-19 14:19

@洛小风 生成器生成的是 比如:
setId(int id){
set("id", id);
}
而自建的:
setId(int id){
this.id=id
}
这个ID值就没有放入Model里面那个Map里啊, 所以Db.batch里面就取不到值了

2019-06-19 14:11

感觉AskForLeave对象里面get和set方法不是生成器生成的, 是自建的属性吧?

2019-06-18 23:25

还有文档中提到的升级注意事项: https://www.jfinal.com/doc/14-1

2019-06-18 23:23

常规使用的1.9升级上来重点大改的地方有日志Log类(批量替换),还有一个是文件上传功能取名字值的API改了(批量替换),Model里面几个get加了_下划线前缀(批量替换)。其他都些小改动根据爆红提示进行修改,换上的新妆的时候各种爆红提示,不要害怕,根据报警提示一点一点改,配合批量替换功能,一会儿就改完了。我升级过1.2的项目到3.5,问题不大

2019-06-18 12:09

数据库做一张cron表,每个任务对应一条记录,增加 version 字段,任务运行前做一下查询,再version +1后的值 再更新到数据库,返回 1 了说明竞争到了执行权限, 就接着运行任务, 否则结束任务即可
比如 UPDATE cron SET version=101 WHERE (`id`='1') and version=100;

2019-06-18 00:08

3.5处理了,HttpKit.readData
去掉 close() 否则后续 ActionReporter 中的 getPara() 在部分 tomcat 中会报 IOException : Stream closed

2019-06-18 00:06

升级吧,推荐使用最新版, 其次最低是3.5版

2019-06-17 23:46

其实看了源码就知道了,第一个是从class输出目录去找的,如果想指定目录可以提前调用PathKit.setWebRootPath

第二个是因为 jfinal-undertow中找到文件夹并且注入的值了

2019-06-17 17:41

我说拼接是 : allowopenid='"+allowopenid+"' 这段代码。。。

2019-06-17 17:41

@洛小风 我觉得更多情况是 数据库里面数据和你准备修改的是一样的, 所以数据没有变化,返回了0

2019-06-17 17:36

batch用法貌似没有问题,SQL存在拼接问题。返回0就是要么数据没有什么改变,要么就是where没有匹配上。
其次再说你这个业务,完全可以用SQL where id in(1,2,3) 这样组装,再update执行一次就OK了,何必大炮打蚊子了, 如果业务是 有一个 是已审批就不执行, 那么后面追加一个and条件就可以了啊

2019-06-14 18:11

想要实现这样的效果,可以自己建一个 MyRoutes, 重写一下:
public Routes add(Routes routes) {
for(Interceptor x : getInterceptors()) routes.addInterceptor(x);
super.add(routes);
return this;
}
自己的业务 Routes 都去继承 MyRoutes 就可以了吧

2019-06-14 14:05

quertXXX(para.getSql(), para.getPara())

2019-06-14 13:58

@白小猿 Record r = Db.findFirst(String sql) 只有一条结果集的时候 https://www.jfinal.com/doc/5-5

2019-06-13 15:56

@sourceTT 好的~ 学习学习争取弄明白原理