表关联操作 存在N+1 查询问题

public class Blog extends Model<Blog> {
    public static final Blog dao = new Blog().dao();

    public User getUser() {
        return User.dao.findById(get("user_id"));
    }
}

public class User extends Model<User>{
    public static final User dao = new User().dao();

    public List<Blog> getBlogs() {
        return Blog.dao.find("select * from blog where user_id=?", get("id"));
    }
}

查询List<Blog> 将会触发多次sql查询User的情况

评论区

JFinal

2020-09-28 22:12

这个不是所谓 "导致" 了问题,而是确实就调用了 find、findById 方法,必定会查询数据库

chcode

2020-09-29 09:18

@JFinal 如何解决呢?写sql join去查询的话是可以一次性获取到数据,但是还是要额外写代码去转化为 blog 里面嵌入user对象这种结构

zzutligang

2020-09-29 10:55

不是如何“解决”的问题。要么你用上面图上的代码做,要么你就自己写sql做。两种方法任选其一。

chcode

2020-09-29 11:56

@zzutligang 代码做 很麻烦, 上图方法效率低 都不是最优的解决方案,不符合jfinal 极简实现并且达到良好性能的思想

zhangtianxiao

2020-09-30 10:22

键盘给我, 我来, 两个方法 getBlogs(), loadBlogs(), getBlogs内部 get('blogs')为null, 则调用load 然后set('blogs',list)

热门反馈

扫码入社