2018-09-02 10:59
@fansunion jfinal 生态在国产 web + orm 框架中已经是最好的了,往后的世界不可能只有 spring 一家,jfinal 的定位与 spring 在很多方面几乎是相反的
jfinal 追求简而精,追求让用户代码量最小、学习成本最低、开发效率最高。jfinal 自身的代码量很小,解决问题时比 spirng 要容易多了,基本就是单步调试往下跟两层就知道原因了,而 spring 之下你跟踪七八层还找不着北呢
2018-09-02 10:54
@nbjgl 这样每次 new 出来一个 factory 太浪费了,可以用一个 static 变量持有这个 factory , 全局共享,只 new 出来一次
2018-09-01 20:27
@fansunion 数据库字段类型是 varchar 的时候,你可以重新运行一下 jfinal 生成器,那么相应的 getter setter 方法中的类型会跟着改变
此外,建议所有字段使用驼峰命名,这样就可以让 JFinalJson、FastJson 转 json string 时的格式统一了,无论是通过 getter 方法还是 Model.attrs 的 Map 转都一样的结果
2018-09-01 20:24
@nbjgl 那个太老了,你可以先参考 beetl 官网的方法整合 beetl,然后通过 renderTemplate(...) 来使用 enjoy 引擎
2018-09-01 18:45
补充一个有用的点: JFinalJson 转 json 时不依赖于 getter 方法,而是将 Model.attrs 这个 Map 中的值转成 json,所以这就支持了你 sql 关联查询时查出来的字段
这类关联查出来的字段在 Model/Bean 中是没有 getter 方法的,相当于动态化了
例如,你在 Article 这个 model 中没有定义 getUserName() 这个方法,但可以这样查询:
select a.*, u.userName from article a inner join user u on a.userId = u.id
上面是一个关联查询,在转 json 时会将 u.userName 这个关联过来的属性转换成 json,而这个功能在一般的 json 转换工具中是不可能实现的
2018-09-01 17:36
Brand 光定义两个属性不够的,需要有相应的 getter 方法配套,因为 fastjson 是通过你的 getter 方法进行 json 转换的
如果用 jfinal 自己的 json 转换工具,则需要 put("company", company) 这样将数据 put 进去才能转换,总的来说没有必要定义属性
此外, createTime 转换错误,你看这个 String 数据是多哪里来的? 是不是自己放进去的? 还是说从数据库来的时候就是 String ?
一般来说 date 数据从数据库出来仍然是 Date 类型,而不会无故成为 String 类型,这个通过单步调试很容易知道类型为啥不对
2018-09-01 15:53
@fansunion 这个需求还用不着扩展 MetaBuilder, 即便是 mybatis , 我相信你在写 sql 时仍然还是要使用下划线形式的,否则 mybatis 还要将你的 sql 中的字段名强行再转换一次,这个成本就太高了
2018-09-01 15:51
@fansunion 用生成器生成 base model,生成后的 getter setter 方法都是驼峰形式的了
生成以后,绝大部分情况下你面对的都是驼峰形变量,例如模板中这样用:
#(shop.userId)
只有当你写 sql 查询的时候才要用与数据库字段一样的形式,例如:
dao.find("select user_id from shop where user_id = ?", userId);
2018-09-01 14:28
@hb963724769 还要检查一下 tomcat 下面的 lib 包中是否存在与你项目中重复的 jar 包,这里所指的重复是指项目重复,但版本不同