• 欢迎访问梯云博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站点击访问
  • 梯云分享近期网站部分改版,改名为梯云博客
  • 梯云博客近期增设了“电影资源”板块,在视频区域下边哦~
  • 梯云音乐上线,提供一站式的音乐下载平台,点击前往梯云音乐
  • 如果百度网盘下载速度过慢,可使用该工具~Proxyee-down 百度网盘不限速
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏梯云吧!

【Hibernate】关于在Hibernate框架中使用多表联合查询

Hibernate 做棵大树 4个月前 (11-04) 146次浏览 0个评论
文章目录[隐藏]

——>最近在写一个项目的时候碰到了一个问题,其实说是“问题”,主要是我的水平太低了/羞涩一笑。

——>就是在进行查询的时候,我想要联合两个表进行查询,但是又不想像 sql 那种 rs.nex() 这种方式去获取和输出数据,而是想要将其封装成为对象,然后在前台通过调用方法进行读取对象的属性。

Let’s begin!

那我就拿我的部分代码来举个例子吧!我的其中涉及到了两个表,分别是 公司表公司资质表,然后在公司资质表中的一个列 company 对应公司表的主键。对应于文件时这样的:

Qualifications.java (公司资质对应实体类):

package com.test.beans;

/**
 * Aptitude entity. @author MyEclipse Persistence Tools
 */

public class <strong>Qualifications</strong> implements java.io.Serializable {

	// Fields

	private String id;
	private String company;
	private String detail;
	private String image;

	// Constructors

	/** default constructor */
	public Qualifications() {
	}

	/** full constructor */
	public Qualifications(String id, String company, String detail, String image) {
		this.id = id;
		this.company = company;
		this.detail = detail;
		this.image = image;
	}

	// Set & Get
        ...

}

Company.java (公司对应实体类):

package com.test.beans;

import java.util.HashSet;
import java.util.Set;

/**
 * Corporation entity. @author MyEclipse Persistence Tools
 */

public class Company implements java.io.Serializable {

	// Fields
	//1 代表直接填充 2 代表需要二次编辑
	private String id;	//ID 生成器生成 ID 2
	private String name;	//前台自动填充 1
	private String operationScope;	//经营范围,前台直接填充 1


	// Constructors

	/** default constructor */
	public Company () {
	}

	/** full constructor */
	public Company (String id, SumAccount sumAccount, String name, String operationScope) {
		this.id = id;
		this.sumAccount = sumAccount;
		this.name = name;
		this.operationScope = operationScope;
	}

        //Set & Get
	...

}

其中,company 只是一个存储的键,并非外键,所以,如果我们想要查找两个表该怎么做呢?

我们知道,Java 的核心是 多线程面向对象 ,所以,我们就用面向对象的方法来解这道题吧~

How ?

我们首先建一个实体类,类中的属性使用你想要获取的属性,一一对应,但是命名可以不同,随个人习惯了,能分清楚就可以,比如,我这里就再建一个类。

QualificationsTemp.java (中间过度类,用于存储信息):

package com.test.beans;

public class QualificationsTemp {
	private String image, company, detail;
	private String id, name, operationScope;
	
	public QualificationsTemp(String image, String company, String detail, String id, String name,
			String operationScope) {
		super();
		this.image = image;
		this.company = company;
		this.detail = detail;
		this.id = id;
		this.name = name;
		this.operationScope = operationScope;
	}
        //Set & Get
        //这个需要写,因为我们通过对象获取其属性就是使用的 set 和 get 方法
        ...
	
}

其中构造方法是必须的,因为我们需要通过这个构造方法初始化对象,为其赋值。可以看出,我新建的这个类定义了和两个对应的实体类相对应的属性,然后就是在 action 中写 SQL 哦,不,是 HQL 语句了。

String hql = "select new com.<strong>test</strong>.beans.QualificationsTemp(ap.image,ap.company,ap.detail,cor.id, cor.name, cor.operationScope)
from <strong>Company</strong> cor,<strong>Qualifications</strong> ap where cor.id = ap.company";
			
Query aptitudeChecking = session.createQuery(hql);
//aptitudeChecking.setString(0, "1");  这一行用于设置预编译的填充 类似于 Preparedstatement 中的‘?’占位符填充
List aptitudeCheckingList = (List)aptitudeChecking.list();

注意上边的 HQL 语句,其中需要写明你的类对应的具体类,以及其中的属性填充要和你构造方法中的一 一对应,这样,就会返回一个指定类型的数组了。

 


TeenShare 梯云分享 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明【Hibernate】关于在 Hibernate 框架中使用多表联合查询
喜欢 (0)
[欢迎投币]
分享 (0)
关于作者:
一个整天无所事事的,有时候忽然热血的孩子
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址