<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試官:有一個(gè) List 對(duì)象集合,如何優(yōu)雅地返回給前端?我懵了。。

          共 389字,需瀏覽 1分鐘

           ·

          2022-08-25 18:31

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

          作者:磚業(yè)洋__

          來源:liuchenyang0515.blog.csdn.net/article/details/118159196


          1.業(yè)務(wù)背景

          業(yè)務(wù)場(chǎng)景中,一個(gè)會(huì)話中存在多個(gè)場(chǎng)景,即一個(gè)session_id對(duì)應(yīng)多個(gè)scene_idscene_name

          如果你寫成如下的聚合模型類

          public class SceneVO {
           private String sessionId;
           private String sceneId;
           private String sceneName;
           // 省略對(duì)應(yīng)的getter和setter方法
          }

          返回的List<SceneVO>形式如下,這個(gè)數(shù)據(jù)在data屬性中

          {
           "data":[
            {
             "sessionId""jksadhjksd",
             "sceneId":"NDJWKSDSJKDKED",
             "sceneName":"場(chǎng)景1"
            },
            {
             "sessionId""jksadhjksd",
             "sceneId":"KLJSDJKLSDFALK",
             "sceneName":"場(chǎng)景2"
            },
            {
             "sessionId""jksadhjksd",
             "sceneId":"KERFJKOVDJKDSS",
             "sceneName":"場(chǎng)景3"
            }
           ]
          }

          每個(gè)對(duì)象里面都帶上了重復(fù)的一個(gè)sessionId數(shù)據(jù),我想提出來該怎么辦?

          我想改為如下形式,sessionId提出到外層,更能體現(xiàn)出一個(gè)sessionId對(duì)應(yīng)多個(gè)sceneId和sceneName的含義,這樣也便于前端取數(shù)據(jù),不然每個(gè)對(duì)象都要增加一個(gè)sessionId屬性,太麻煩。

          {
           "data": {
            "sessionId""jksadhjksd",
            "sceneList": [
             {
              "sceneId":"NDJWKSDSJKDKED",
              "sceneName":"場(chǎng)景1"
             },
             {
              "sceneId":"KLJSDJKLSDFALK",
              "sceneName":"場(chǎng)景2"
             },
             {
              "sceneId":"KERFJKOVDJKDSS",
              "sceneName":"場(chǎng)景3"
             }
            ]
           }
          }

          2.實(shí)體類

          方法如下首先創(chuàng)建兩個(gè)實(shí)體類

          public class SceneVO {
           private String sessionId;
           private List<SubSceneVO> sceneList;
           // 省略對(duì)應(yīng)的getter和setter方法
          }
          public class SubSceneVO {
           private String sceneId;
           private String sceneName;
           // 省略對(duì)應(yīng)的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 標(biāo)簽:用于定義關(guān)聯(lián)的list集合類型的封裝規(guī)則
                property:對(duì)應(yīng)父類中l(wèi)ist屬性名,這里SceneVO類里的List變量名為sceneList
                ofType:集合存放的類型,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>

          <!-- 一個(gè)session_id對(duì)應(yīng)多條記錄,返回的是SceneVO對(duì)象,SceneVO對(duì)象有一個(gè)List裝著SubSceneVO  -->
              <select id="selectBySessionId" parameterType="string" resultMap="BaseResultMap">
                  select session_id, scene_id, scene_name
                  from 表名
                  where session_id = #{sessionId,jdbcType=VARCHAR}
              </select>
          </mapper>
          • collection標(biāo)簽:用于定義關(guān)聯(lián)的List集合類型的封裝規(guī)則
          • property屬性:對(duì)應(yīng)父類中List集合的變量名,這里SceneVO類里的List變量名為sceneList
          • ofType屬性:集合存放的類型,List集合要裝的類的類名,這里是SubSceneVO

          4.Service層

          public interface SceneService {
           /**
           * 獲取場(chǎng)景信息
           */
           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);
          }
              

          1、社區(qū)糾紛不斷:程序員何苦為難程序員?

          2、該死的單元測(cè)試,寫起來到底有多痛?

          3、互聯(lián)網(wǎng)人為什么學(xué)不會(huì)擺爛

          4、為什么國(guó)外JetBrains做 IDE 就可以養(yǎng)活自己,國(guó)內(nèi)不行?區(qū)別在哪?

          5、相比高人氣的Rust、Go,為何 Java、C 在工具層面進(jìn)展緩慢?

          6、讓程序員早點(diǎn)下班的《技術(shù)寫作指南》

          點(diǎn)分享

          點(diǎn)收藏

          點(diǎn)點(diǎn)贊

          點(diǎn)在看

          瀏覽 41
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  9l视频自拍九色9l视频成人 | 99热国产在线 | 狠狠干免费视频 | 五月天成人网址 | 91丨豆花丨国产熟女 |