2019-11-01 18:34

@smileForLife 缺点大致:
1:复杂度高的 sql 无法实现,要知道 sql 是一门语言,可以无限嵌套,可以有各种判断、关联

2:where 条件如果来点 and or 以及 "小括号" 的组合,优先级就不好处理,例如下面的 sql:
select * from t where a = x and b = y or c = z and ( c not in d or d = e) or f != g
以上 sql 中的 or 的优先级比 and 低,小括号中 or 的优先级需要被改变,这种 where 条件用 wrapper 设计来实现很繁索,不如直接 sql 来得爽快,你可以试着用 wrapper 用法来表达上面的 where 条件

3:不同数据库有不同的 sql 方言,wrapper 实现面向 java 代码,无法做到兼容各种数据库

4:引入一套新的概念,增加了学习成本

5:最终还是需要将 wrapper 实现翻译成 sql, 这个翻译的过程容易出 bug,对于嵌套 sql 复杂度急剧升级,例如,下面的 sql 你可以试着来用 wrapper 来表达一下:
select * from t1 where id in ( select id from t2 where x = a and y = b) inner join t3 on t1.tid = t3.tid
无论是用户使用 warpper 的 API,还是你将 wrapper 翻译成 sql ,都很麻烦,sql 嵌套一下,where 来点 优先级与嵌套,复杂度将指数组上升

6:从 API 的使用上,wrapper 并不比 sql 直观,代码量甚至比 sql 要多,以下是对比:
Db.find("select * from t whre x=a and y=b or z=c");
Db.select("*").from("t").where("x", a).and("y", b).or("z", c).find();
wrapper 用法只带来一点虚幻的安全感,而且这种安全感只对那些 sql 功底不过关的同学有吸引力

7:还有其它一堆设计思维层面问题,不再赘述

wrapper 方案折腾了半天,最终带来的将是无穷无尽的麻烦,实际好处并没有。这就是我们的古人所说的世上本无事,庸人自扰之的典型

你自己可以考察一下那些已经存在的 wrapper 方案,让它们去实现我前面讲来的嵌套功能,感受一下

2019-11-01 16:56

@117know 使用单步调试法,把玩一下 exprList 、stat、scope、writer、env 这五个变量,想要的功能基本就有数了

2019-11-01 16:19

@万里 如果你使用 jfinal 生成器生成过 getter 方法,到前台可以是驼峰格式

生成器在首页下载 jfinal_demo_for_maven 可以获取里面的用法

2019-11-01 16:17

使用 centos 很多年,稳定、可靠,是用于服务器的最好 linux 发行版,赞

2019-11-01 16:15

@smileForLife 尽量避开了这种设计, Wrapper 设计唯一的好处是写 java 代码比写 sql 安全感强一点点,但缺点太多,以前谈过多次,不再赘述

2019-11-01 11:39

在 exec 方法中通过下面的代码获取 id 与 num 变量的值:
Integer id = (Integer)exprList.getExpr(0).eval(scope);
Integer num = (Integer)exprList.getExpr(1).eval(scope);

也可以这样来获取:
Object[] values = exprList.evalExprList();
Integer id = values[0];
Integer num = values[1];

在扩展的时候,把玩一下 exprList 、stat、scope、writer、env 这五个变量,基本上可以实现所有功能

2019-11-01 11:35

@Joph_csu enjoy 模板热加载性能极高,生产环境也可以配置上热加载 engine.setDevMode(true);

enjoy 在我的电脑上每秒渲染是 6 万 9 千多次,性能早就过剩了

2019-11-01 11:34

@hb963724769 先要确保拦截器本身已经被触发

2019-10-31 19:05

文档中的 paginate 常见问题解决已经详细说明了原因,以及解决方案:
https://www.jfinal.com/doc/5-6

2019-10-31 19:04

@happyboy 这个是正解

建议用上 jfinal 的 enjoy 模板引擎,谁用谁爽

2019-10-31 19:03

@杜福忠 我发现你已经是开发成员了

注意提交的代码尽可能保持与 jfinal weixin 公众号模块设计的风格,这样能降低学习成本

2019-10-31 19:01

总之,当前我怀疑你的事务拦截器并没有被触发

2019-10-31 19:01

注意业务层的拦截器被触发,需要开启 me.setInjectDependency(true) 并且在 Controller 中使用 @Inject 将业务层注入到控制层

如果不使用上面的方式,触发拦截器还可以使用 Aop.get(...)

controller 层的 AOP 是自动触发的,无需上述的方式

2019-10-31 18:50

感觉是极简设计,代码量很少,用起来应该会很舒适,谢谢分享,赞

2019-10-31 16:09

@jfinal_365 jfinal weixin 是一个 SDK,也类似于一个大的框架性的东西,里面有些功能可能没做进去,但你可以利用这个基础架构,自己加功能,加入的功能可以无缝的用上

例如,jfinal weixin 中的各种可能是以 XxxApi.java 的形式存在的,如果某个功能还没有,你可以加个 YyyApi.java, 基本照抄 XxxApi.java,稍微改点代码即可实现自己想要的功能

总体架构已经做好了主要的事情,你自己加功能会很方便,而且不需要整合,直接加直接用