2018-03-24 14:27
@JFinaler1 是不是开启事务了? InnoDB 支持事务而 MyISAM 不支持事务。
开启事务以后,如果后一条 sql 依赖于前一条 sql,那是会有影响的,因为事务提交以后第一条 sql 才真正被持久化
如果开启了事务,关闭一下再试试,建议用 InnoDB
2018-03-24 13:39
@JFinaler1 升级下数据库驱动,以及 druid 版本,看是不是这些第三方有 bug
jfinal 所有数据库操作都是将你的 sql + paras 直接扔给了 JDBC API 去处理,未做过任何干预,所以 jfinal 层面出错的可能性几乎不存在
2018-03-23 23:49
@JFinaler1 sql 中不要拼接参数,参数改成问号占位:
String sql = "insert into xxx(a, b) values ( ?, ?)";
Db.update(sql, p1, p2);
查询的时候也类似:
Db.find("select * from xxx where a=?", a);
2018-03-23 16:05
@HingLo BaseAction 中如果存在 public 方法,但又不希望是 action 的话,可以在方法上添加一行代码:
@Before(NotAction.class)
2018-03-23 11:55
@怎懂落寞 对于翻页来说,通常就是 url 问号挂参,代码的写法多种多样,就看你对 enjoy 理解的深度,我下面给出一种写法:
#set(append = "applicant=" + applicant + "&department=" + department ....其它条件省略)
#set(append = "?" + append)
#@paginate(blogPage.pageNumber, blogPage.totalPage, url)
上面的代码也就是说,无论你变量值是否存在,我都给你拼接上,没有的话就是 null,被传到后端时过滤掉这些 null 值条件去生成 sql
当然,还有更好的办法,做个模板函数或者 shared method 来辅助,下面给出模板函数的方法:
#define buildAppend(cnd)
#set(append="");
#for(x :cond)
#if(x)
#set(append = append + x)
#end
#set(append = "?" + append);
#end
用的时候这样:
#@buildAppend([applicant, department, kemu, payment ....其它条件省略])
以上就相当于是写程序了, enjoy 的功能全在那里了,具体怎么使用就看你自己了
2018-03-23 11:21
@JFinal9527 如果是放 cache 中,也取来 token 也是要看看是否过期,过期时间是在放在 cache 当时就计算好的,取出来的时候只需要与系统当前时间对比一下就可以了
当然,你如果用的 ehcache 可以设置最大存活时间,让 ehcache 的过期功能来代替判断,不过你仍然也可判断 cache 是否存在,不存在代表已过期