【hibernate进阶】hql简单属性查询

        翻开之前的博客,距离最开始写hibernate进阶专栏的第一篇博客开始,已经有八个多月了,因为最近做的项目在用hql,所以继续完善这个专栏.在今天主要分享hql的简单属性查询,通过查询单个属性和通过五种不同的查询方式来讲解.


1.hql单个属性查询

首先新建一个Student的JavaBean.
package com.hqlquery.hibernate;

import java.util.Date;

public class Student {

	private int id;
	
	private String name;

	private Date createTime;
		
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
}

        hql的单个属性查询的hql语句和sql语句查询单个属性类似,hql语句查询时使用的单个属性与 JavaBean中的字段一致,sql语句查询时使用的单个属性与数据库表字段一致.语句都是select 字段名 from 表名
package com.hibernate.hibernate;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;

import junit.framework.TestCase;

public class SimplePropertyQueryTest extends TestCase {
//hql单个属性查询
public void testQuery(){
	Session session=null;
	try{
		session=HibernateUtils.getSession();
		session.beginTransaction();
		List students=session.createQuery("select name from Student").list;
		for(Iterator iter=student.iterator();iter.hasNext();){
			String name=(String)iter.next();
			System.out.println(name);
		}
		session.getTransaction().commit();
	}catch(Exception e){
		e.printStackTrace();
		session.getTransaction().commit();
	}finally{
		HibernateUtils.closeSession(session);
	}
}


2.hql多个属性查询

返回entity

返回entity的时候,需要提供构造函数,例如查询时使用的属性是id和name,那么则需要提供相应的构造函数.
public Student() {
	}

	public Student(int id, String name) {
		this.id = id;
		this.name = name;
	}
	
在写测试类的时候,只需要将hql语句和返回的类型修改即可.

//hql多个属性查询,返回student
public void testQuery(){
	Session session=null;
	try{
		session=HibernateUtils.getSession();
		session.beginTransaction();
		//可以使用hql返回student对象,需要提供构造函数
		List students=session.createQuery("select new Student(id,name) from Student").list;
		for(Iterator iter=student.iterator();iter.hasNext();){
			Student student=(Student)iter.next();
			System.out.println(student.getId()+","+student.getName());
		}
		session.getTransaction().commit();
	}catch(Exception e){
		e.printStackTrace();
		session.getTransaction().commit();
	}finally{
		HibernateUtils.closeSession(session);
	}
}


返回object

//hql多个属性查询,返回对象数组
public void testQuery(){
	Session session=null;
	try{
		session=HibernateUtils.getSession();
		session.beginTransaction();
		//查询多个属性,返回对象数组集合
		//数组元素的类型与查询的属性类型一致
		//数组的长度与select中查询的属性个数一致

		List students=session.createQuery("select id,name from Student").list;
		for(Iterator iter=student.iterator();iter.hasNext();){
			Object[] obj=(Object[])iter.next();
			System.out.println(obj[0]+","+obj[1]);
		}
		session.getTransaction().commit();
	}catch(Exception e){
		e.printStackTrace();
		session.getTransaction().commit();
	}finally{
		HibernateUtils.closeSession(session);
	}
}


使用别名

使用别名查询的时候有两种形式,使用as别名和不使用as别名.

1.不使用as别名

select s.id, s.name from Student s

//hql多个属性查询,返回student
public void testQuery(){
	Session session=null;
	try{
		session=HibernateUtils.getSession();
		session.beginTransaction();
		//可以使用as别名
		List students=session.createQuery("select s.id,s.name from Student s").list;
		for(Iterator iter=student.iterator();iter.hasNext();){
			Student student=(Student)iter.next();
			System.out.println(student.getId()+","+student.getName());
		}
		session.getTransaction().commit();
	}catch(Exception e){
		e.printStackTrace();
		session.getTransaction().commit();
	}finally{
		HibernateUtils.closeSession(session);
	}
}


2.使用as别名

select s.id, s.name from Student as s


//hql多个属性查询,返回student
public void testQuery(){
	Session session=null;
	try{
		session=HibernateUtils.getSession();
		session.beginTransaction();
		//可以使用as别名
		List students=session.createQuery("select s.id,s.name from Student as s").list;
		for(Iterator iter=student.iterator();iter.hasNext();){
			Student student=(Student)iter.next();
			System.out.println(student.getId()+","+student.getName());
		}
		session.getTransaction().commit();
	}catch(Exception e){
		e.printStackTrace();
		session.getTransaction().commit();
	}finally{
		HibernateUtils.closeSession(session);
	}
}


总结:

简单属性查询
* 单一属性查询,返会属性结果集列表,元素类型和实体类中相应的类型一致
* 多个属性查询,多个属性查询返会对象数组,对象数组的长度取决于属性的个数
 对象数组中元素的类型取决于属性在实体类中的类型
* 如果认为返会数组不够对象化,可以使用hql动态实例化Student对象


转载于:https://www.cnblogs.com/chenxiaochan/p/7237547.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值