2019-05-26 10:48
@zb99908 Db.tx 是直接支持事务的,不而要 Enhancer.enhance()
Db.tx 是无需拦截器就支持了事务,注意看文档
还是要 单步调试进入 Db.tx 内部,看 connection.rollback() 这个回滚被执行没有
在 Db.tx 内部设置断点先
2019-05-26 10:39
@Sohnny 单页版其实也可以用 enjoy, 你观察一下 jfinal club 的文章回复功能,虽然是 ajax 请求后端,但仍然是 enjoy 渲染返回的 html 片段,而没有返回 json
ajax 请求直接返回 html 片段的主要好处有:
1:html 片段在后端用 enjoy 书写,可读性更好,因为模板的可读性要远高于 js 拼接代码
2:html 片段在后端用 enjoy 书写,可维性更高,因为修改模板要比修改 js 拼接代码方便得多
3:enjoy 生成 html 片段,要比 js 拿到 json 以后在前端生成 js 要方便
4:可以避开前后分离带来的各种成本,ajax + enjoy 可以做得极其强大,比前后分离成本低得多:
https://www.jfinal.com/share/895
前后分离,本质就是用 js 来操纵数据在 html 中的填充、更新,而 ajax + html 片段也可以是用 js 来操纵数据在 html 中的填充、更新,稍微写几个工具方法就可以实现
这两种模式的区别在于,前者 js 操纵的粒度更细,后者是拿到整个 html 片段以后整体替换,要简便很多
前者可以减少一定的网络流量,但是 html 片段配置 gzip 压缩后传输后的网络占用可以忽略不计
2019-05-25 11:20
@hb963724769 特别注意一个事: 数据读到内存,进行改变,然后再存入数据库,即便这个过程处在事务之中,也会出现幻读,除非你将事务级别调到最高级 Connection.TRANSACTION_SERIALIZABLE
但最高级的事务级别对性能影响较大,一般不建议这么用,而是避免读数据再操作,用 sql + para 的方式让数据库来操作数据