Java mysql 多表联查 与循环查询组装数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java mysql 多表联查 与循环查询组装数据相关的知识,希望对你有一定的参考价值。

有三个表 用户表 用户角色id关联表 角色表 需要返回 集合里面包含了用户的信息 角色的名称 还需要条件查询 带分页 还要限制返回字段的数量 名称 我使用Example 进行查询整个的user表 然后for循环这个表查询到的所有数据 使用gson数据映射到自己要返回的vomodel里面 再根据userid查询 关联表 根据关联表的roleid查询 角色表的名称 set到要返回的vomodel里面 ,领导说不允许这么写非要手动写关联查询 可是现在用的example自动生成的工具 不知道应该怎么办了 或者说 到底哪个效率更高

参考技术A 你的思路是没有问题的,但是你的这种方式效率很低,假设你的用户表有10万条数据,你需要查角色表10万次吧,数据库里数据都是保存在文件里的,读取磁盘文件都需要花时间,10万次读取磁盘文件那就会花费很多时间了。两张表联合查询的话只需要查询一次,效率就高了些。记住,能不查数据库的就尽量不要查询。追问

就像楼下老哥说的 我如果直接吧角色表 关联表 全都一次性查出进来 然后进行循环组装 呢

本回答被提问者采纳
参考技术B 你的意思是多张表关联查询 得出 一个结果表的话 那么就映射成一个实体list

如果说是几个表的几个单独的查询的话 ,那么就用几个Dao分别查询

需要陈述的是 一个select 查出来的 要么是一个值(String 基础值 )要么是一列值(JavaBean) 要么是一张表(List) 不可能说是你说的那样 查出多张表结果

如果是多张表结果 那就分多个Dao实现追问

现在是三个表关联的 用户 和角色 有一个中间表 进行id关联 用户表 没有存放角色的名称 所以只能自己查询组装 ,但是以后怎么办 感觉多表关联查询很麻烦

参考技术C 从效率上来说,和数据库发生交互耗时最长。原则上来说,尽量减少和数据库的交互。写sql。两张表的数据,是无法返回到一个映射实体类里的,你可以自己建一个实体类。将你所需要的字段,都写进去,查出来数据后,手动映射追问

我如果一次都查出来 然后进行循环组装呢 有什么问题

追答

循环组装是什么鬼,循环set吗

mysql多表联合查询并且可以补充没有的数据

有两张表a 与表b,
其它表b.id与a.uid关联,我现在使用selcet * from a,b where (b.id=a.uid)
这里因为有这个相等的条件存在,这个查询会因为b表中的id不存在,而不能显示a.uid的表记录。我想显示出表a 与表b的关系,如果b.id记录不存在,自动用null代替,如果操作呢?

select * from a left join b on a.uid=b.id 参考技术A select a.* ,b.* from a left join b on a.uid=b.id

以上是关于Java mysql 多表联查 与循环查询组装数据的主要内容,如果未能解决你的问题,请参考以下文章

mysql-多表联查(实例)

MySQL 基础之 单表多表联查

SQL多表联查总结

Mysql多表联查——经典50题

键值约束与扩展属性ER关系图三大范式分组查询多表联查

mysql多表联查