mapper 查询返回实体对象里面包含多层级list几何

需求: 需要4 层 树形结构数据
List<List<List<List<>>>>
对应mapper 映射
在这里插入图片描述

sql 语句:

 SELECT
	si.id,
	si.NAME,
	ss.id sid,
	ss.NAME sname,
	ad.id AS deid,
	ad.DeviceName AS dename,
	ad.Platform AS detype,
	d1.id AS deid,
	d1.`name` AS dename,
	d1.Platform AS detype,
	s5.id AS aid,
	s5.parameter_name AS aname 
FROM
	sys_item si
	LEFT JOIN sys_station ss ON si.id = ss.item_id
	LEFT JOIN sys_station_aliyun s1 ON ss.id = s1.station_id
	LEFT JOIN aliyun_device ad ON ad.id = s1.aliyun_device_id
	LEFT JOIN sys_argument_aliyun s2 ON s2.aliyun_device_id = s1.aliyun_device_id
	LEFT JOIN sys_station_dianxin s6 ON ss.id = s1.station_id
	LEFT JOIN dianxin_device d1 ON d1.id = s6.dianxin_device_id
	LEFT JOIN sys_argument_dianxin s7 ON s7.dainxin_device_id = s6.dianxin_device_id
	LEFT JOIN sys_argument s5 ON ( s5.id = s7.argument_id OR s5.id = s2.argument_id )

返回结果:
在这里插入图片描述

问题:
在查询第三层 集合的时候,是通过不同表 查询出来,用同一个实体类接收,但是不知道 在查询的时候就合并在一起

修改 :
在查询的时候 通过 UNION ALL 将第三层集合合并在一起
sql:

SELECT
	si.id,
	si.NAME,
	ss.id sid,
	ss.NAME sname,
	mm.did AS deid,
	mm.dename AS dename,
	mm.detype AS detype,
	s5.id AS aid,
	s5.parameter_name AS aname 
FROM
	sys_item si
	LEFT JOIN sys_station ss ON si.id = ss.item_id
	LEFT JOIN (
		(
		SELECT
			s1.station_id,
			ad.id AS did,
			ad.DeviceName AS dename,
			ad.Platform AS detype,
			s2.argument_id AS argument_id 
		FROM
			sys_station_aliyun s1
			LEFT JOIN aliyun_device ad ON ad.id = s1.aliyun_device_id
			LEFT JOIN sys_argument_aliyun s2 ON s2.aliyun_device_id = s1.aliyun_device_id 
		) UNION ALL
		(
		SELECT
			s6.station_id,
			d1.id AS did,
			d1.`name` AS dename,
			d1.Platform AS detype,
			s7.argument_id AS argument_id 
		FROM
			sys_station_dianxin s6
			LEFT JOIN dianxin_device d1 ON d1.id = s6.dianxin_device_id
			LEFT JOIN sys_argument_dianxin s7 ON s7.dainxin_device_id = s6.dianxin_device_id 
		) 
	) mm ON mm.station_id = ss.id
	LEFT JOIN sys_argument s5 ON s5.id = mm.argument_id 
WHERE
	si.del_flag = 0 
	AND ss.del_flag =0

查询结果就是 我所需要的

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,感谢您的提问。关于您的问题,可能有以下几种情况导致mapper查询接口返回list为空: 1. 数据库中不存在符合查询条件的数据,因此查询结果为null。 2. 查询条件错误,导致查询结果为空。 3. 查询语句错误,导致无法正确查询数据。 4. 程序逻辑错误,未正确处理查询结果。 为了更准确地定位问题并解决,需要查看具体的代码和运行时日志。如果您能提供更多信息,我将尽力为您解答。 ### 回答2: 假设有一个名为User的实体类,对应数据库中的用户表。User类中有一个属性name,表示用户的姓名。 现在有一个Mapper接口UserMapper,其中定义了一个根据姓名查询用户的方法getUserByName: ```java public interface UserMapper { List<User> getUserByName(String name); } ``` 在实际使用中,如果数据库中没有符合条件的用户记录,那么该方法返回list就会为null。 例如,我们先插入两条用户记录到数据库中: | id | name | |----|------| | 1 | Alice| | 2 | Bob | 然后调用getUserByName方法查询一个不存在的用户名,比如"Charlie": ```java List<User> userList = userMapper.getUserByName("Charlie"); ``` 在这种情况下,由于数据库中没有名为"Charlie"的用户记录,所以getUserByName返回list会为null。 我们可以通过判断list是否为null来进行处理,例如可以在方法中加入以下逻辑: ```java List<User> getUserByName(String name) { List<User> userList = userMapper.getUserByName(name); if (userList == null) { System.out.println("未找到符合条件的用户记录"); } else { System.out.println("找到" + userList.size() + "条符合条件的用户记录"); } return userList; } ``` 这样就可以根据返回list是否为null来对查询结果进行相应的处理。 ### 回答3: 假设我们有一个User表,其中存储了用户的信息,包括id、name和age字段。我们使用MyBatis框架来进行数据库操作,定义了一个UserMapper接口来进行查询操作。 在某个特定的场景中,我们使用UserMapper接口中的selectUserList方法来查询所有用户的信息,并返回一个List<User>对象。但是,当我们调用selectUserList方法时,返回List<User>对象却是null。 这种情况可能有以下几种原因导致: 1. 数据库连接异常:在调用selectUserList方法时,数据库连接出现问题,导致无法查询到结果。这种情况下,需要检查数据库连接是否正确、是否有足够的权限,以及数据库的状态是否正常。 2. SQL语句错误:在查询语句中可能存在错误,导致无法正确地查询到结果。这种情况下,需要检查SQL语句是否正确,是否存在语法错误以及逻辑错误,例如表名、字段名拼写错误,或者查询条件错误等。 3. 数据库表为空:如果数据库中的User表没有任何记录,查询操作返回的结果就是空的。这种情况下,需要检查数据库中是否存在用户记录,并根据情况进行插入相应的数据。 4. MyBatis配置错误:可能是MyBatis的配置文件中存在错误,导致无法正确地映射查询结果到User对象。这种情况下,需要检查MyBatis的配置文件是否正确,并确保映射关系的正确性。 解决该问题的方法可以包括:检查数据库连接、检查SQL语句的正确性、检查数据库是否为空、检查MyBatis的配置文件等。如果仍然无法解决问题,可以使用日志等方式来进行错误排查,或者向MyBatis官方社区提问以获取更多的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值