• jpa中将查询的字段返回为Map键值对类型


    由于最近的一个项目技术选型用了JPA,在使用过程中,感觉JPA对Map这种类型着实有点不兼容。

    问题:只想查询表中个别字段,并将这些字段封装为键值对map的形式返回给前端

    sql语句:select b.userid,b.truename from WcmAppuser b where b.userid in (1,2,3);

    如果对返回的结果不做任何处理,返回的结果是这样的:

    [
        [
            1,
            "张三"
        ],
        [
            2,
            "李四"
        ],
        [
            3,
            "王二"
        ]
    ]

    但是,这明显不是我想要的结果,我理想中的结果应该是这样的:

    [
        {
            "userid":1,
            "truename": "张三"
        },
        {
            "userid":2,
            "truename": "李四"
        },
        {
            "userid":3,
            "truename": "王二"
        },
    ]

    所以我一直在搜 JPA 怎样能把返回的结果装配成这种,但是一直没有搜到我想要的结果。直到我发现自己走进去了一个误区,我一直在想怎么将 list 转换为Map,

    但是转为 map 之后,每一个字段又都是游离的,不能像存放一个 Object 一样。我忽然意识到一种办法,List--->Map--->List,下面直接上代码。

    List list = null;
    List<Object> arrayList = null;
    StringBuffer sql = new StringBuffer("select b.userid,b.truename from WcmAppuser b where b.userid in (");
                    for (int i=0;i<n.length;i++){
                        if(i == n.length-1){
                            sql.append(n[i]);
                            sql.append(")");
                        }else {
                            sql.append(n[i]);
                            sql.append(",");
                        }
                    }
                    Query query = entityManager.createNativeQuery(String.valueOf(sql));
                    list = query.getResultList();
    //这上面的代码可以不用看,只是 JPA 对in的兼容也不是很好,所以我使用了nativeSql
                    arrayList = new ArrayList<>();
                    for (Object obj : list) {
                        Map<String, Object> map = new HashMap<>(); //这个Map一定要放在循环里面,如果放在循环外面,你add进去的map指向的是同一个内存地址,不管你add进去多少次,数据都是一样的。
                        Object[] arr = (Object[]) obj;
                        map.put("userid",arr[0]);
                        map.put("truename",arr[1]);
                        arrayList.add(map);
                    }

    足厚返回的结果:

    {
      "code": "0",
      "msg": "接口调用成功",
      "data": [
        {
          "truename": "李四",
          "userid": 1
        },
        {
          "truename": "张三",
          "userid": 2
        },
        {
          "truename": "王二",
          "userid": 3
        }
      ],
      "extra": null
    }

      

  • 相关阅读:
    springboot文件上传: 单个文件上传 和 多个文件上传
    Eclipse:很不错的插件-devStyle,将你的eclipse变成idea风格
    springboot项目搭建:结构和入门程序
    POJ 3169 Layout 差分约束系统
    POJ 3723 Conscription 最小生成树
    POJ 3255 Roadblocks 次短路
    UVA 11367 Full Tank? 最短路
    UVA 10269 Adventure of Super Mario 最短路
    UVA 10603 Fill 最短路
    POJ 2431 Expedition 优先队列
  • 原文地址:https://www.cnblogs.com/BeenTogether/p/14566444.html
Copyright © 2020-2023  润新知