1.业务背景
业务场景中,一个会话中存在多个场景,即一个session_id对应多个scene_id和scene_name
如果你写成如下的聚合模型类- public class SceneVO {
- private String sessionId;
- private String sceneId;
- private String sceneName;
- // 省略对应的getter和setter方法
- }
复制代码 返回的List形式如下,这个数据在data属性中- {
- "data":[
- {
- "sessionId": "jksadhjksd",
- "sceneId":"NDJWKSDSJKDKED",
- "sceneName":"场景1"
- },
- {
- "sessionId": "jksadhjksd",
- "sceneId":"KLJSDJKLSDFALK",
- "sceneName":"场景2"
- },
- {
- "sessionId": "jksadhjksd",
- "sceneId":"KERFJKOVDJKDSS",
- "sceneName":"场景3"
- }
- ]
- }
复制代码 每个对象里面都带上了重复的一个sessionId数据,我想提出来该怎么办?
我想改为如下形式,sessionId提出到外层,更能体现出一个sessionId对应多个sceneId和sceneName的含义,这样也便于前端取数据,不然每个对象都要增加一个sessionId属性,太麻烦。- {
- "data": {
- "sessionId": "jksadhjksd",
- "sceneList": [
- {
- "sceneId":"NDJWKSDSJKDKED",
- "sceneName":"场景1"
- },
- {
- "sceneId":"KLJSDJKLSDFALK",
- "sceneName":"场景2"
- },
- {
- "sceneId":"KERFJKOVDJKDSS",
- "sceneName":"场景3"
- }
- ]
- }
- }
复制代码 Java 集合系列文章:https://www.javastack.cn/categories/Java/
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 property="sceneList" ofType="你的包名.vo.SubSceneVO">
- <result column="scene_id" jdbcType="VARCHAR" property="sceneId"/>
- <result column="scene_name" jdbcType="VARCHAR" property="sceneName"/>
- </collection>
- </resultMap>
- <select id="selectBySessionId" parameterType="string" resultMap="BaseResultMap">
- select session_id, scene_id, scene_name
- from 表名
- 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 {
- @Resource
- private 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);
- }
复制代码 来源:liuchenyang0515.blog.csdn.net/article/details/118159196
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |