文章目录

  • 1.业务背景
  • 2.实体类
  • 3.自定义Mapper和xml文件
  • 4.Service层
  • 5.Controller层

1.业务背景

业务场景中,一个会话中存在多个场景,即一个session_id对应多个scene_idscene_name

如果你写成如下的聚合模型类

public class SceneVO {private String sessionId;private String sceneId;private String sceneName;// 省略对应的getter和setter方法
}

返回的List<SceneVO>形式如下,这个数据在data属性中

{"data":[{"sessionId": "jksadhjksd","sceneId":"NDJWKSDSJKDKED","sceneName":"场景1"},{"sessionId": "jksadhjksd","sceneId":"KLJSDJKLSDFALK","sceneName":"场景2"},{"sessionId": "jksadhjksd","sceneId":"KERFJKOVDJKDSS","sceneName":"场景3"}]
}

每个对象里面都带上了重复的一个sessionId数据,我想提出来该怎么办?

我想改为如下形式,sessionId提出到外层,更能体现出一个sessionId对应多个sceneIdsceneName的含义,这样也便于前端取数据,不然每个对象都要增加一个sessionId属性,太麻烦。

{"data": {"sessionId": "jksadhjksd","sceneList": [{"sceneId":"NDJWKSDSJKDKED","sceneName":"场景1"},{"sceneId":"KLJSDJKLSDFALK","sceneName":"场景2"},{"sceneId":"KERFJKOVDJKDSS","sceneName":"场景3"}]}
}

2.实体类

方法如下:

首先创建两个实体类

public class SceneVO {private String sessionId;private List<SubSceneVO> sceneList;// 省略对应的getter和setter方法
}
public class SubSceneVO {private String sceneId;private String sceneName;// 省略对应的getter和setter方法
}

3.自定义Mapper和xml文件

public interface BusinessScenesCustomMapper {SceneVO selectBySessionId(String sessionId);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="你的包名.mapper.BusinessScenesCustomMapper"><resultMap id="BaseResultMap" type="你的包名.vo.SceneVO"><result column="session_id" jdbcType="VARCHAR" property="sessionId"/><!--collection 标签:用于定义关联的list集合类型的封装规则property:对应父类中list属性名,这里SceneVO类里的List变量名为sceneListofType:集合存放的类型,List集合要装的类的类名,这里是SubSceneVO--><collection property="sceneList" ofType="你的包名.vo.SubSceneVO"><result column="scene_id" jdbcType="VARCHAR" property="sceneId"/><result column="scene_name" jdbcType="VARCHAR" property="sceneName"/></collection></resultMap><!-- 一个session_id对应多条记录,返回的是SceneVO对象,SceneVO对象有一个List装着SubSceneVO  --><select id="selectBySessionId" parameterType="string" resultMap="BaseResultMap">select session_id, scene_id, scene_namefrom 表名where session_id = #{sessionId,jdbcType=VARCHAR}</select>
</mapper>

collection标签:用于定义关联的List集合类型的封装规则
property属性:对应父类中List集合的变量名,这里SceneVO类里的List变量名为sceneList
ofType属性:集合存放的类型,List集合要装的类的类名,这里是SubSceneVO


4.Service层

public interface SceneService {/*** 获取场景信息*/SceneVO getScenesInfo(String sessionId);
}
@Service
public class SceneServiceImpl {@Resourceprivate BusinessScenesCustomMapper businessScenesCustomMapper;......public SceneVO getScenesInfo(String sessionId) {return businessScenesCustomMapper.selectBySessionId(sessionId);}
}

5.Controller层

......
@Resource
private SceneService sceneService;@GetMapping("/getScenesInfo")
public ResModel getScenesInfo(String sessionId) {SceneVO sceneVO = sceneService.getScenesInfo(sessionId);return ResModel.ok(sceneVO);
}


欢迎一键三连~

有问题请留言,大家一起探讨学习

----------------------Talk is cheap, show me the code-----------------------

当返回前端的数据中存在List对象集合,如何优雅操作?相关推荐

  1. 【从0到1学Web前端】javascript中的ajax对象(一)

    [从0到1学Web前端]javascript中的ajax对象(一) 如今最流行的获取后端的(浏览器从server)数据的方式就是通过Ajax了吧.今天就来具体的来学习下这个知识吧.假设使用ajax来訪 ...

  2. JavaScript id_好程序员web前端分享Javascript中函数作为对象

    好程序员web前端分享Javascript中函数作为对象,Javascript赋予了函数非常多的特性,其中最重要的特性之一就是将函数作为第一型的对象.那就意味着在javascript中函数可以有属性, ...

  3. 获取application.yml配置文件中配置的对象集合

    在之前的工作中遇到这样一个问题, 就是在application.yml配置文件中写一些对象集合的数据(当时不让把数据写在数据库中)然后获取他们, 尝试了很多方式都无果, 最终找到了解决的办法, 特此记 ...

  4. 数组中数组/嵌套对象数组的遍历操作

    数组中数组/嵌套对象数组的遍历操作 总结以下方法 1.for i in arr (推荐) 2.arr.foreach(item=>{ item.foreach(item2=>{ } ) } ...

  5. 界外篇:返回前端订单列表中的订单详情为null,如何去除,如何为空

    在写项目中,有时候我们返回给前端的数据为null,比如: 按照需求,有的需要这样写,但是有的就不需要, 一.那么如果为null,如何不显示这项呢? 办法如下: 第一种方法: 需要在实体类是哪个加一个注 ...

  6. 广州蓝景分享—前端开发JavaScript中的Array对象与其他数组

    各位小伙伴好,今天我们广州蓝景与大家分享一些前端技术知识. JavaScript中的Array对象与其他编程语言中的数组一样,可以将多个项目的集合存储在单个变量名下,并具有用于执行常见数组操作的成员. ...

  7. VB中利用FSO对象对文件夹操作

    windows还给我们提供了一个叫做FileSystemObject(简称FSO)对象.FSO对象模型中包括了计算机文件系统所有的对象.见下.利用这些对象可以更方便的操作文件系统. 对象   功能 D ...

  8. 使用稀疏 4D 卷积对 3D LiDAR 数据中的运动对象进行后退分割(IROS 2022)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨泡泡机器人 来源丨 泡泡机器人SLAM Receding Moving Object Segme ...

  9. .NET/C#中对自定义对象集合进行自定义排序的方法

    一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...

最新文章

  1. VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
  2. 马哥学习笔记——shell变量类型
  3. 范例ppt_消防安全知识主题班会PPT,全内容高质量课件,完整框架精美套用
  4. 再破纪录!ECCV 2020 旷视研究院15篇成果总览
  5. C/C++学习之路: STL
  6. 复习一下日志等级类型
  7. C# 向Main函数传递参数(程序启动时传递参数)
  8. dva源码解析(一)
  9. 居中的文字在小屏幕下后面的换行
  10. Class 'QrCode' not found ? 和 laravel 生成二维码接口(Simple QrCod)
  11. 英特尔发布CPU新架构,突破性采用3D堆栈法
  12. 学而思编程python软件怎么样_学而思编程社区缺点详细分析
  13. cdr X6 64位32位缩略图补丁包
  14. 表达式引擎Aviator基本介绍及使用以及基于Aviator的规则引擎(附代码详细介绍)
  15. 算法复杂度分析中的符号(Θ、Ο、ο、Ω、ω)简介
  16. JS_js数组倒序排列、字符串数组转为数字数组,反转数组/字符串/数字
  17. scrapy爬取晋江免费小说(章节)+ cookie爬vip章节
  18. miniUI打印(miniUI整合Lodop打印控件)
  19. python 爱心名字代码_python写心形名字
  20. VLOOKUP函数常用套路大全

热门文章

  1. 小米感谢米粉选择环保版小米11,但喜欢环保的米粉实在少之又少
  2. 如何使用Python来操作Excel呢?给你一张Excel学生成绩表,如何计算指定班级的学生成绩的平均值呢?你要知道的都在这篇博客里面
  3. 实现双token无感刷新
  4. stream流处理List
  5. 美国互联网大厂“扎堆”Web3
  6. asp版茶叶礼品卡券、海鲜礼品卡券、大闸蟹礼品卡券、龙虾礼品卡券-提货系统-生成卡密源码
  7. 有关苹果证书介绍(Certificates, Identifiers Profiles)
  8. 如何创建 .css文件?
  9. Wannafly挑战赛3-A-珂学送分(概率dp)
  10. 学习Kotlin~类