首页 > 技术文章 > Spring Data Jpa使用——select查询2个字符串进行封装Map处理

zuiyue_jing 2021-01-05 19:14 原文

开发环境

  • Spring Boot 2.4
  • Hibernate 5.4
  • Spring Data Jpa 2.2

背景

  • 在一次查询中,需要使用group by 对查询数据分组查询,返回两个字符串类型的数据。使用Spring Data Jpa操作,没有找到解封装成List对象的方法,后来使用的Hibernate进行实现。

实现方法

  • 使用的查询SQL如下
select f.farm_uid as farmUid,f.client_user_mid as clientUserMid from m_shelf_info f group by f.client_user_mid,f.farm_uid
  •  最终代码如下
/**
* 获取场地和客户
*/
public List<ShelfInfoTable> getFarmAndCustomerQuery(){
Query query = entityManager.createNativeQuery("select f.farm_uid as farmUid,f.client_user_mid as clientUserMid from m_shelf_info f group by f.client_user_mid,f.farm_uid");
//将查询结果中的每一个对象转成map
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

List rows = query.getResultList();
List<ShelfInfoTable> shelfInfoTableList = new LinkedList<>();
for (Object obj : rows) {
Map<String,String> row = (Map<String,String>) obj;

//封装想要的实体
ShelfInfoTable shelfInfoTable = new ShelfInfoTable();
shelfInfoTable.setFarmUid(row.get("farmUid"));
shelfInfoTable.setClientUserMid(row.get("clientUserMid"));
shelfInfoTableList.add(shelfInfoTable);
}

return shelfInfoTableList;
}

 

推荐阅读