hibernate实现多表联合查询

使用Hibernate进行多表关联查询的Java开发指南 最后,我们使用Hibernate的查询语言执行了多表关联查询,并输出了结果。在Hibernate的配置文件(通常为hibernate.cfg.xml)中,确保您已正确配置了数据库连接和实体类的映射。一旦我们完成了Hibernate的配置和实体类的定义,就可以使用Hibernate执行多表关联查询了。现在,我们已经完成了Hibernate的配置、实体类的定义和多表关联查询的代码编写。请确保在运行代码之前,您已经正确配置了Hibernate和数据库连接,并且数据库中存在相应的表和数据。注解表示主键的生成策略。 阅读详情

hibernate实现多表联合查询

  (2012-06-10 21:37:28)
标签: 

联合查询

 

对象联合查询

分类: ssh

    以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。  

    hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系。

    例如:student表和score表需要做联合查询。

    1)sql: select s.id,s.name,sc.score from student as s,score as sc where s.id = sc.userId;

    (字段都是用的数据库中字段名称)

    2)HQL: select s.id,s.name,sc.score from Student as s,Score as sc where s.id = sc.userId;

    (上面字段都是 javabean的属性)

     如果我们按1)查询的话,必须调用 session.createSQLQuery();方法

     如果按2)查询,还是调用 session.createQuery();

     只是要注意,平时我们查询的时候,例如:“from Student ”查询的结果集 封装的全都是student对象,但是2)执行的结果集里面不是对象,而是一系列数组。需要转换成需要的样式。

下面 是查询的一段代码:

Session session = getHibernateTemplate().getSessionFactory()
   .getCurrentSession();
   StringBuffer sb = new StringBuffer(" select user.username,user.truename,user.sex,user.idnum,user.level,s.sumScore from Score as s,Examuser as user where s.id.userId = user.id ");
   if(score != null){
    if(score.getExamId()!=null && !"".equals(score.getExamId())
      && !"null".equals(score.getExamId())){
     sb.append(" and s.examId =:examId ");
    }
    if(score.getExamPlace()!=null && !"".equals(score.getExamPlace())
      && !"null".equals(score.getExamPlace())){
     sb.append(" and s.examPlace =:examPlace ");
    }
    if(score.getUsername()!=null && !"".equals(score.getUsername())
      && !"null".equals(score.getUsername())){
     sb.append(" and s.username like:username ");
    }
   }
   sb.append(" order by s.sumScore desc ");
   Query q = session.createQuery(sb.toString());
   if(score != null){
    if(score.getExamId()!=null && !"".equals(score.getExamId())
      && !"null".equals(score.getExamId())){
     q.setParameter("examId",score.getExamId());
    }
    if(score.getExamPlace()!=null && !"".equals(score.getExamPlace())
      && !"null".equals(score.getExamPlace())){
     q.setParameter("examPlace",score.getExamPlace());
    }
    if(score.getUsername()!=null && !"".equals(score.getUsername())
      && !"null".equals(score.getUsername())){
     q.setParameter("username","%"+score.getUsername()+"%");
    }
   }
   List list = q.list();

需要将查询的结果集 进行一下转换:

List stuList = scoreService.findAllScore(queryScore, null); // 返回的结果集
   if(stuList != null && stuList.size()>0){
    list = new LinkedList();
    StudentScore st;
    for(int i = 0; i < stuList.size();i++){
     st = new StudentScore();
     Object[] object = (Object[])stuList.get(i);// 每行记录不在是一个对象 而是一个数组
     String userId =  (String)object[0];
     String username =  (String)object[1];
     String truename =  (String)object[2];
     String sex =  (String)object[3];
     String idnum =  (String)object[4];
     String level =  (String)object[5];
     Double sumScore =  Double.parseDouble(String.valueOf(object[6]));
     String paperId =  (String)object[7];
     // 重新封装在一个javabean里面
     st.setUserId(userId);
     st.setUsername(username);
     st.setTruename(truename);
     st.setIdnum(idnum);
     st.setLevel(DictSwitch.getValue("DICT_LEVEL",level));
     st.setSex(DictSwitch.getValue("DICT_SEX",sex));
     st.setPaperId(paperId);
     st.setSumScore(sumScore);
     st.setExamplace(DictSwitch.getValue("DICT_EXAMSTATION",examplace));
     list.add(st); // 最终封装在list中 传到前台。
    }

 

工业机器人关节拆装流程_一文读懂模块化直驱电机及机器人关节模组 私信“干货”二字,即可领取138G伺服与机器人专属及电控资料!如果说芯片是智能行业最为重要的核心元件,那么电机几乎可以说是支撑了整个自动化和大工业生产以及现代社会最为重要的部件,全世界90%的能源是由电机发出来的,而70%是由电机消耗调的,电机可以说是整个人类社会能源循环的占有绝对地位的产品。普通伺服电机伺服电机其实已经算是电动机中比较高端的类型,特别是永磁同步类型的伺服电机,由于其启动快速,惯量... 阅读详情

相关推荐

AutoCAD 2024 Mac版安装激活教程:从下载到破解一站式解决方案

本文提供AutoCAD 2024 Mac版的详细安装与优化指南,包括系统要求检查、下载安装流程、常见问题解决方案及性能优化设置。特别介绍了如何应用最新补丁和Update保持软件性能,帮助用户顺利完成从安装到破解的全过程。

weixin_29239661的博客 846

Hibernate 使用union all的办法

首先,hibernate中hql是不支持union 或 union all 的; 其次,项目中where 判断条件使用or导致查询缓慢,索引未起作用,故有此需求,同时转换成相应的实体类; 最后,直接上代码: StringBuffer sql = new StringBuffer(""); sql.append(" select {i.*} "); sql.append(" from t_use...

wh_first2018的博客 4438

ORCAD原理图关联封装时出现ERROR(ORCIS-6245)、ERROR(ORCIS-6013)问题

1、当你进行如下操作时: 系统先是提示你出现ERROR(ORCIS-6245)然后再确定后再出现ERROR(ORCIS-6013)问题 是由于你的数据库的路径不对。 具体操作方法如下:1、先找到你的CAPTURE.INI文件。 2、用记事本打开CAPTURE.INI。找到下图路径 3、在你的Orcad capture CIS原理图软件中点击 Options------>CIS con...

weixin_42304393的博客 2万+

Hibernate Union All编程

public List findUnionCount() { // TODO Auto-generated method stub /*select count(*) from i_email where 1=1 and birthday between '1991-01-01 00:00:00' and '1992-12-31 23:59:59' union a

wfung_kwok的专栏 5570

VsCode+JLink+GCC替代Keil开发GD32程序-个人总结

对个人使用vscode+Jlink开发GD32程序做了总结,供需要者参考。

MyCollege1999的博客 2766

嵌入式学习笔记——EEPROM(M24M01)

M24M01是ST公司出品的1Mbit(128Kbyte)I2C兼容EEPROM,兼容所有I2C总线模式(1MHz、400kHz、100kHz),Page大小为256字节,支持硬件写保护,超过400万次写入操作,超过200年的数据留存通过模块化设计,涵盖了 M24M01-RMN6P 的功能介绍、引脚架构、硬件连线、模块化代码以及性能优化思路,我们将 M24M01 EEPROM 与 STM32 的集成变得高效而可靠。希望能帮你在 STM32 上快速上手,并让你的项目存储管理更高效可靠。

2301_80488241的博客 1657

Hibernate入门07_继承映射03_union方式

一、hibernate继承映射之union方式union方式:子类从父类继承的字段和自己独有的字段都存放在自己的表里。 二、Student继承Person为例三、代码public class Person { private Integer id; private String name; private String age; //get/set... }publ

回不去的编程之路lgz 584

STM32独立实现CANOpen主机功能:从零构建轻量级控制方案

本文详细介绍了如何在STM32上不依赖CanFestival库,从零构建一个轻量级的CANOpen主机方案。文章深入剖析了CANOpen主机的三大核心功能——NMT网络管理、SDO参数配置与PDO过程数据交换,并提供了从硬件准备、驱动层构建到协议实现的完整代码实战。该方案代码精简,资源占用低,特别适合在资源受限的STM32平台上实现工业控制、电机驱动等场景的稳定通信。

potato的博客 1072

java hibernate 联合查询_hibernate实现多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系。例如:student表和score表需要做联合查询。1)sql: selects.id...

weixin_42685438的博客 1163

MySQL 8.0数据库崩了别慌!手把手教你仅凭一个.ibd文件找回数据(附Go工具包)

本文详细介绍了在MySQL 8.0数据库崩溃后,如何仅凭.ibd文件恢复数据的完整流程。通过使用Go语言工具包和ALTER TABLE技巧,即使没有备份也能实现数据重生。文章包含从环境准备到数据验证的全方位指导,帮助DBA和开发者应对紧急数据恢复场景。

weixin_29235923的博客 420

【教程4>第4章>第15节】基于FPGA的costas环的设计构架

目录1.costas环的整体实现结构2. FPGA设计构架3.参考文献 Costas 环是一种用于载波同步的闭环反馈控制系统,主要应用于通信系统中的相干解调。其基本原理是通过鉴相器(Phase Detector,PD)比较接收信号与本地载波信号的相位差,将这个相位差信息经过环路滤波器(Loop Filter,LF)滤波后,去控制数控振荡器(Numerically Controlled Oscillator,NCO)的输出频率和相位,使得本地载波能够跟踪接收信号的载波,最终实现载波同步。我们在《F

FPGA/MATLAB学习教程/源码/项目合作开发 567

Hibernate(37)Hibernate的多表联合查询如何实现?

Hibernate多表联合查询示例展示了如何使用HQL实现多对多关系的表连接查询。示例包含Student和Course两个实体类,通过@ManyToMany注解建立关联关系,并提供了Hibernate配置文件和工具类。演示了如何插入示例数据,为后续查询操作准备测试环境。该实现可用于从多个相关表中提取关联数据,是Hibernate中处理复杂查询的典型应用场景。

qq_43012298的博客 498

DeerFlow 系列教程 第二十篇 | 前端定制与二次开发指南

支持的语言定义在locale.tsLocale 检测采用三级降级策略Cookie 优先:检查localeCookie浏览器语言默认值en-US.value;if (locale!DeerFlow 使用管理主题切换,在根布局中通过主题相关的 CSS 变量定义在中(约 10KB)。: boolean;// 是否支持深度思考。

weixin_43674738的博客 223

hibernate 实现多表联合查询

见到一篇好文章:  http://blog.sina.com.cn/s/blog_67b9ad8d01010by1.html 以前用sql实现联合查询是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。       hibernate很多实现都是靠喜欢

zhg09shanshui163的博客 580

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 了解 Spring Data JPA
下一篇: 聊聊单元测试(三)——Spring Test+JUnit完美组合
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值