jfinal返回多表查询的结果

加入像这种SQL语句,

SELECT brand.*,IF(t0.count is NULL ,0,t0.count) count FROM t_product_brand  as brand

就是在原始表中多加了一个或多个字段,大家是怎么处理的,目前我是通过

find = Db.find(sql); 的方式,然后getStr("count") 这样的方法,感觉比较麻烦, 大家有更好的解决办法吗?

评论区

JFinal

2019-03-15 12:04

用这种方式就挺好,如果多表字段有重名,可以使用 as xxx 起个别名

zb99908

2019-03-15 14:24

@JFinal 如果字段多了就比较麻烦一点,比如品牌表,在查询的时候只多了一列统计该品牌的商品数量这个字段,仅多了一个字段就需要使用Db.find(sql);的方式,而不能使用model的方式来查询,或者我写一个VO类继承该model的Base类增加一个字段吧..也是一种解决方式,

JFinal

2019-03-16 12:03

@zb99908 用 sql 管理功能, sql 中的 select 写好一次基本就不需要动它了:
https://www.jfinal.com/doc/5-13

zb99908

2019-03-18 09:26

好的,谢谢,我看下怎么做的~!

doubuxingle

2019-09-12 01:08

@JFinal 如果用getter,setter的javabean来操作,那多表查询的结果需要在model中额外添加getter吗?要是多出来几十个字段咋整呀,而且大部分都是其他model的属性,感觉重复编码了。 另外转JSON的时候是用FastJson.getJson().toJson(...)来转换的,这就必然需要getter。困扰好久了,麻烦帮忙看看吧。

JFinal

2019-09-12 08:05

@doubuxingle 我自己的项目是这么来用的:
1:me.setJsonFactory(new MixedJsonFactory());
2:数据库字段弄成驼峰形式

doubuxingle

2019-09-12 10:00

@JFinal
1: 这个在转json的时候是优先匹配model,record。getter反而是最后再匹配。
2:数据库由于是现有系统没办法改,里面各种格式的都有(XXYY,XX_YY,xx_yy,xxYY,xxyy),所有我才想在getter中统一字段的格式,不然每次取值都得去对照数据库字段
另外 我目前是想用jfinal替换以前的jeesite1.x,大多数历史遗留问题导致我没办法一次性改动太大。我翻看了一下jfinal-club代码,数据库字段直接从源头就是驼峰形式,所以不存在这些问题

JFinal

2019-09-12 11:44

@doubuxingle MixedJsonFactory 与 JFinalJsonFactory 会将 getter 方法当成不存在,所以不依赖于 getter 方法转 json

而 FastJsonFactory 只处理 getter 方法来转 json

具体到你的场景,建议使用 jfinal 的生成器先生成 getter 方法,然后配置成:
me.setJsonFactory(new FastJsonFactory());

至于关联查询得到的字段,如果你希望还是得到驼峰形式的字段名,手动在最终的 Model 中适当添加 getter 方法即可

如果为了省事,对于关联查询得到的值,使用非驼峰

JFinal

2019-09-12 11:46

如果从数据库源头就是驼峰的,无论你用哪种方式都是完美的,整个世界会很美好

数据库字段与代码变量命名形式的不同,只不过是历史原因与习惯问题,我在 mysql 中用驼峰命令字段超过八年了,爽得不得了

doubuxingle

2019-09-12 13:11

谢谢回复。
历史遗留问题要处理好依我看来还是多少要增加点工作量了。

我目前是单表查询用model通过FastJsonFactory转。

多表查询用record,然后在sql中统一规范成驼峰形式的别名,通过JFinalJsonFactory 转。