通常情况下,单表的查询比较简单,在hibernate中可以将查询记录直接映射到具体的实体类,因为通常会通过JPA注解将数据表和实体类建立映射关系,在查询数据,保存数据时,可以直接操作java实体类,但是涉及到多表查询,查询的多条记录,如果也要和java的类建立关系映射,需要做一些处理。

hibernate查询支持多种,如使用基本实体类对象查询,HQL查询,QBC(Query By Criteria)以及原生sql语句查询

我个人在复杂查询时候还是喜欢用原生sql查询,因为HQL查询,操作的是实体类对象,感觉不方便,原生sql语句,我可以直接在Navicat中书写好,执行一遍,然后复制到java语句中,出错概率小,而且查询语句还可以借助Navicat的查询编辑器来写

比如,今天有一个需求,需要查询出订单列表信息,所需信息需要从三个表中查询出来

三个表连接查询,写出的语句,直接可以复制到java语句中

三个表中的数据查询出来,但是并没有具体的实体类(与数据表字段一 一 对应的关系的类),所以我创建了一个dto类,可以看到是HotelOrderListDto,查询出来的多条记录用List保存,类型是HotelOrderListDto

但是注意,查询出来的字段名称需要设置别名,因为数据表中的字段是带下划线方式,而我创建的java的dto类是驼峰命名的,所以并不能直接对应上,所以在sql语句中为每个字段设置了别名,与HotelOrderListDto类的属性名称相同。同事在建表tmc_hotel_info时候,hotel_id用的bigint类型,我在HotelOrderListDto这个类中设置hotelId时候,试了Integer和Long都不行,Hibernate会提示异常类型不匹配,会提示需要integer类型,但是实际上是BigInteger类型,使用Long也是,还是会提示需要Long类型,但实际是BigInteger(数据表中的字段类型,查询之后需要映射给这个类的hotelId属性),所以最后设为math包下的BigInteger类型,可以成功将查询出来的hotel_id值映射给HotelOrderListDto的hotelId

然后还有一步比较关键,就是

     // 执行分页查询Query query = session.createSQLQuery(sql).setString("ucode", ucode).setFirstResult(firstResult).setMaxResults(pageSize);
//        查询结果映射给HotelOrderListDto对象List<HotelOrderListDto>  hotelOrderListDtos = query.setResultTransformer(Transformers.aliasToBean(HotelOrderListDto.class)).list();

使用这个方法,将查询结果传递到HotelOrderListDto类中,然后就可以将List<HotelOrderListDto> 对象,遍历出来,放到json数组中,然后添加到JsonObject中返回给前端,这是service层

    @Override@Transactionalpublic JSONObject hotelOrderList(Integer pageNum, Integer pageSize, String ucode) {List<HotelOrderListDto> hotelOrderListDtos = hotelOrderListDao.hotelOrderList(pageNum, pageSize, ucode);LOGGER.info("订单列表返回数据:" + hotelOrderListDtos.toString());JSONArray jsonArray = new JSONArray();for (HotelOrderListDto hotelOrderListDto: hotelOrderListDtos) {jsonArray.add(hotelOrderListDto);}JSONObject hotelOrderListDtosJsonObject = new JSONObject();hotelOrderListDtosJsonObject.put("hotelOrderList", jsonArray);LOGGER.info("hotelOrderListDtosJsonObject:"+hotelOrderListDtosJsonObject.toJSONString());return hotelOrderListDtosJsonObject;}

然后在postman中测试,就可以返回json数据

   @PostMapping(params = "hotelOrderList")public AjaxJson hotelOrderList(@RequestBody HotelOrderListRequest hotelOrderListRequest) {AjaxJson json = new AjaxJson();if (hotelOrderListRequest == null) {json.setSuccess(false);json.setMsg("参数为空");return json;}Integer pageNum = hotelOrderListRequest.getPageNum();Integer pageSize = hotelOrderListRequest.getPageSize();String ucode = hotelOrderListRequest.getUcode();JSONObject responseJsonObject = hotelOrderListService.hotelOrderList(pageNum, pageSize, ucode);json.setObj(responseJsonObject);return json;}

Hibernate用的还是不熟,虽然现在很少有公司用这个ORM框架了,但是现在公司的这个项目在用,就还是要好好熟悉,多多总结一下吧!

Hibernate多表关联查询记录映射相关推荐

  1. asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询

    本文我们将继续分享介绍Spring Boot在整合Mybatis开发企业级应用时其他典型的业务场景,即Mybatis是如何实现多表关联查询时将查询结果集与对象进行映射的,主要的内容包含"一对 ...

  2. MYSQL多表关联查询与子查询

    多表关联查询 关联查询又名连接查询,其主要包括了内连接,外连接,自连接,交叉连接等四个大类. 首先我们要清楚我们为什么要使用多表关联查询,肯定是因为我们想要显示的数据来自于两个或多个数据表内部,我们想 ...

  3. Spring Data JPA 实现多表关联查询

    原文链接:https://blog.csdn.net/johnf_nash/article/details/80587204 多表查询在spring data jpa中有两种实现方式,第一种是利用hi ...

  4. 【SpringBoot Data JPA】多表关联查询

    SpringBoot Data JPA 多表关联查询 前言 一.数据库架构设计 1.1 数据表结构 2.2 建立数据库表: 二.SpringBoot整合JPA多表查询 2.1 环境配置 2.2 建立数 ...

  5. Spring Data JPA--多表关联查询--实例

    原文网址:Spring Data JPA--多表关联查询--实例_IT利刃出鞘的博客-CSDN博客 简介 多表联查有以下方案 原生SQL JHQL Specification 实体关联(不推荐) 见: ...

  6. Spring Data JPA 多表关联查询的实现

    Spring Data JPA 多表关联查询的实现 多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询 ...

  7. jpa多表关联查询_JPA【关联查询篇】

    摘要:本文主要介绍JPA的多表关联查询(一对一.一对多.双向关联.多对一.多对多)以及N+1查询的优化. 1. JPA多表关联查询 多表关联查询就是实现使用一个实体类对象操作或者查询多个表的数据. 配 ...

  8. 面试官:为什么mysql不建议执行超过3表以上的多表关联查询?

    概述 前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort ...

  9. java调用js查询mongo_mongodb操作之使用javaScript实现多表关联查询

    一.数据控制 mongodb操作数据量控制,千万控制好,不要因为操作的数据量过多而导致失败. 演示一下发生此类错误的错误提示: 二.多表关联查询实现 /* 声明变量bridge,用来记录两个集合所连接 ...

最新文章

  1. linux rcs执行错误,求助大神:linux启动的时候执行完rc.sysinit就死在rcS上了
  2. 新建站点如何与服务器,新建站点如何收录更快
  3. 使用OpenCV进行人脸关键点检测
  4. 机器学习入门学习笔记:(3.2)ID3决策树程序实现
  5. MAP Protocol 协议(2)介绍二
  6. [转]Android动态加载jar/dex
  7. Java 基础 之 标识符
  8. .NET Core开发实战(第26课:工程结构概览:定义应用分层及依赖关系)--学习笔记...
  9. 重学java基础第二课:java和python分析
  10. mysql安装过程-zip安装
  11. jenkins集成钉钉
  12. 记账用哪个软件比较好?
  13. 【网络编程】【SCTP】SCTP协议介绍,四次握手,三次挥手
  14. 数据库查询——选课系统
  15. U盘装系统后容量变小解决方法
  16. Problem:Ubuntu Give up waiting for root device
  17. GAMES104 B1+B2 引擎的结构与开发分层
  18. 2021湖南省地区高考成绩排名查询,2021长沙市地区高考成绩排名查询,长沙市高考各高中成绩喜报榜单...
  19. python从小到大排序
  20. 笔记-迎难而上之Java基础进阶8

热门文章

  1. clion打开时如何不自动重新打开上一次的项目
  2. Redis集群的搭建与主从复制,redis-cluster
  3. HTML+CSS详解
  4. android activity获取dialog对象,Android:从DialogFragment调用Activity的功能
  5. 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈
  6. 计算机课平时成绩重要吗,大学计算机基础课程平时成绩评定方法的研究.pdf
  7. 代码逻辑分析_致C++完美主义者:使用Visual Studio新工具分析你的代码
  8. SpringSecurity框架【详解】
  9. android 手机内存uri_Android消息机制Handler原理解析
  10. Python学习—2048小游戏等4个小练习