JFinal 关联查询 renderJson 嵌套结构

发布于 2021-11-29 06:52:58 字数 859 浏览 826 评论 12

findFirst("select p.*,pu.name postUserName,pu.level postUserLevel from post p left join user pu on p.postUserId=pu.id where p.id=?",1)

返回的层级都在一层,不是面向对象的结构

{
  "title":"开源中国红薯最帅",
  "content":"众所周知,比红薯帅的人都...",
  "createTime":"2016-12-17 13:15:00",
  "commentNum":9999,
  "postUserId":"lfkdhah823472",
  "postUserName":"开源小编",
  "postUserLevel":-1
}

实际上我想要的返回是这样

{
  "title":"开源中国红薯最帅",
  "content":"众所周知,比红薯帅的人都...",
  "createTime":"2016-12-17 13:15:00",
  "commentNum":9999,
  "postUserId":"lfkdhah823472",
  "postUser":{
    "id":"lfkdhah823472",
    "name":"开源小编",
    "level":-1
  }
}





如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

狠疯拽 2021-12-03 14:01:31

我也想这样,但是感觉太多手动调用了。另外帖子列表里都用缓存会不会缓存使用很大

别再吹冷风 2021-12-03 14:01:21

新增加的Bean生成能改善这个问题吗?

为你鎻心 2021-12-03 14:00:47

回复
@啦啦啦拉拉 : jfinal 自 2.2 以来就有了 bean,不存在新增加这一说,缓存看你怎么做,不是缓存整个 list,而是对 user 这张表进行 id ---> user 的缓存,在 getUser() 时利用 id 去缓存获取 user

绝情姑娘 2021-12-03 13:51:20

jfinal 手册里面有例子,只需要在 Post 这个类中添加一个 getUser() 方法,然后在这个方法中直接 find("select * from user where id=?", getId()) 即可

然后在后面 json 的时候这样:FastJson.getJson().toJson(post),或者 Jackson.getJson().toJson(post),这两个 json 转换工具默认是根据 getter 方法去转换,所以会调用你上面创建的 getUser() 方法,并进行进一步的转换

在大并发情况下,getUser() 里面是利用 cache join的方式去内存中找数据,不用读库,速度极快,jfinal 社区对于用户表的处理就是这样

德意的啸 2021-12-03 13:29:45

太惨了,不知道新版的JFinal增加的Bean能不能处理这个问题

恋你朝朝暮暮 2021-12-03 10:38:42

  是不是只能拼啊

緦唸λ蓇 2021-12-03 04:06:19

已经被客户端那边的同事吐槽很久了,扁平的结构可读性很差,我这边也是只能每个查询手动去set

海之角 2021-12-03 00:15:12

回复
@啦啦啦拉拉 : 童鞋,推荐你业余去学习下mybatis,这会让你尝到新东西。

檐上三寸雪 2021-12-02 10:14:31

回复
@web4j : 其实你做单表查询,然后postUser对应的就是User,然后User的查询可以这样搞:User.findById(strId),User加个缓存,然后关联查询不要了,在你的Java里面循环处理查询的resultList,把User放进去。

各自安好 2021-12-01 09:25:30

回复
@web4j : 这是一个建议。

小瓶盖 2021-12-01 05:18:20

回复
@web4j : mybatis 才是老东西好不好,每个字段都要手写,太原始了。

执手闯天涯 2021-11-30 09:43:00

findFirst 返回的是Model或者Record,本质就是一个扁平的Map。

你这个SQL返回的值都是同一个层次的,所以renderJson渲染的结果并没有错。

你如果要像你那样去处理,就需要自己转换成bean(或者用map嵌套实现)。

so, 简单的框架做简单的处理。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文