首页 新闻 会员 周边 捐助

关于Dao设计中对于大型的实体对象是否应该一次查询组合全部数据

0
悬赏园豆:20 [已解决问题] 解决于 2020-01-11 00:18

问题来源

我在做一个网站(Spring栈完全前后端分离),设计Dao时,User实体类包含基本信息(password, username...),然后含有一个UserExt对象保存额外信息(entry_date, leave_date...),还含有List<Role>保存角色信息(角色中拥有权限),还含有一个List<Permission>保存自有的权限信息。
由于User含有非常多的信息,在做UserService时,User需分步获取的各部分信息,类似于:
// 获取用户基本信息
User user = UserDao.getUserByUsername(username);
// 获取用户额外信息
int userId = user.getId();
UserExt userExt = UserDao.getUserExtByUserId(userId);
user.setUserExt(userExt);
// 获取用户角色信息
List<Role> roles = UserDao.getRolesByUserId(userId);
user.setRoles(roles);
// 获取用户权限信息
List<Permission> permissions = UserDao.getPermissionsByUserId(userId);
user.setPermissions(permissions)
// 得到最终组装成的 user

问题

现在问题是:
因为每次请求都肯定要使用User信息,也就是每次都需要很多的Dao操作,上面还不是最惨,最惨的是还需要Dao组装role的权限,又是一批Dao请求,这样会不会导致Web性能大幅下降,应如何改善呢?
鸣黎的主页 鸣黎 | 初学一级 | 园豆:193
提问于:2020-01-10 16:58
< >
分享
最佳答案
0

多次获取数据组装肯定是比一次性获取数据慢,
1 建议弄个视图把,还方便筛选到底哪些字段需要加载哪些字段不需要加载,
你总结一下需要哪些字段,
然后建立一个视图
后面直接读取视图
2 上ef,信任ef的sql优化

收获园豆:20
猝不及防 | 老鸟四级 |园豆:2878 | 2020-01-10 17:17

视图这种方案应该是我需要的解决方法。
ef好像是dotnet中的吧,,因为我是新手,刚会使用Spring,暂时还不考虑换其它框架。
谢谢谢谢!

鸣黎 | 园豆:193 (初学一级) | 2020-01-10 17:24

@鸣黎: 我现在的目标就是建立一个自己的网站,,,但是一窍不通,有空多交流啊

猝不及防 | 园豆:2878 (老鸟四级) | 2020-01-10 17:29

@猝不及防: 你还不能搞一个自己的网站?你的博客我可扫了一眼,不要欺负我们这些刚入门的

鸣黎 | 园豆:193 (初学一级) | 2020-01-10 17:40

@鸣黎: 桌面端的我熟悉些..网站真的一点都不懂...

猝不及防 | 园豆:2878 (老鸟四级) | 2020-01-10 18:15

@猝不及防: 我也是一点一点看资料学的,缺少有人交流指教,正好搭个伙,哈哈哈

鸣黎 | 园豆:193 (初学一级) | 2020-01-11 00:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册