zoukankan      html  css  js  c++  java
  • 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
    }

      

  • 相关阅读:
    阿诺尔德给5至15岁孩子出的数学题
    上手机器学习,从搞懂这十大经典算法开始
    海报模板
    测度论--长度是怎样炼成的[zz]
    柯西不是你
    搭建Web部署环境
    搭建jdk环境
    Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
    Web开发技术选型之Java与PHP
    从java到web前端再到php,一路走来的小总结
  • 原文地址:https://www.cnblogs.com/BeenTogether/p/14566444.html
Copyright © 2011-2022 走看看