HQL简单demo

HQL作为面向对象的查询语言,是Hibernate推荐的查询方式。本文深入探讨了HQL的使用,包括别名指定、投影查询、动态实例查询、条件查询(按位置和名字)以及分页查询等核心概念。

    HQL是面向对象的查询语言,它和SQL查询语言有些相似,但它使用的是类、对象和属性的概念,而没有表和字段的概念。在Hibernate提供的各种检索方式中,HQL是官方推荐的查询语言,也是使用最广泛的一种检索方式。本文将对HQL几种常用的方式进行讲解。

指定别名

@Test
	public void aliasTest(){
		
			// TODO Auto-generated method stub
			SessionFactory sf = null;		
			Session session = null;
			Transaction ts = null;		
			try {
	  			sf = HibernateUtil.getSessionFactory();
				session = sf.getCurrentSession();
				ts = session.beginTransaction();			
				String hql = "from Person as p where p.name ='shi'";
				Query query = session.createQuery(hql);
				List<Person> ps=query.list();
				for (Person person : ps) {
					System.out.println(person.toString());
				}
			} catch (HibernateException e) {
				// TODO Auto-generated catch block
				if(ts != null)
				{
					ts.rollback();
				}
				e.printStackTrace();
			}
		} 

投影查询

@Test
	public void portionQueryTest(){

	// TODO Auto-generated method stub
	SessionFactory sf = null;		
	Session session = null;
	Transaction ts = null;		
	try {
			sf = HibernateUtil.getSessionFactory();
		session = sf.getCurrentSession();
		ts = session.beginTransaction();			
		String hql = "select p.name,p.sex from Person as p";
		Query query = session.createQuery(hql);
		List<Object[]> list=query.list();
		Iterator it = list.iterator();
		while(it.hasNext())
		{
			Object[] obj = (Object[]) it.next();
			System.out.println(obj[0]+"  "+obj[1]);
		}
	} catch (HibernateException e) {
		// TODO Auto-generated catch block
		if(ts != null)
		{
			ts.rollback();
		}
		e.printStackTrace();
	}
} 

动态实例查询

@Test
	public void dynamicQueryTest(){

		// TODO Auto-generated method stub
		SessionFactory sf = null;		
		Session session = null;
		Transaction ts = null;		
		try {
				sf = HibernateUtil.getSessionFactory();
			session = sf.getCurrentSession();
			ts = session.beginTransaction();			
			String hql = "select new Person(p.name,p.sex)from Person as p";
			Query query = session.createQuery(hql);
			@SuppressWarnings("deprecation")
			Object count=query.uniqueResult();
			List<Person> list=query.list();
			for (Person p : list) {
				System.out.println(p.getName()+"  "+p.getSex());
			}
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			if(ts != null)
			{
				ts.rollback();
			}
			e.printStackTrace();
		}
	} 

条件查询(按参数位置查询)

@Test
	public void paraQueryTest1(){
	// TODO Auto-generated method stub
	SessionFactory sf = null;		
	Session session = null;
	Transaction ts = null;		
	try {
			sf = HibernateUtil.getSessionFactory();
		session = sf.getCurrentSession();
		ts = session.beginTransaction();			
		String hql = "from Person where name like ?";
		Query query = session.createQuery(hql);
		query.setString(0, "%er%");
		List<Person> list=query.list();
		for (Person p : list) {
			System.out.println(p.toString());
		}
	} catch (HibernateException e) {
		// TODO Auto-generated catch block
		if(ts != null)
		{
			ts.rollback();
		}
		e.printStackTrace();
	}
	 

条件查询(按参数名字查询)

@Test
	public void paraQueryTest2(){

	// TODO Auto-generated method stub
	SessionFactory sf = null;		
	Session session = null;
	Transaction ts = null;		
	try {
			sf = HibernateUtil.getSessionFactory();
		session = sf.getCurrentSession();
		ts = session.beginTransaction();			
		String hql = "from Person where id=:id";
		Query query = session.createQuery(hql);
		query.setParameter("id",4);
		List<Person> list=query.list();
		for (Person p : list) {
			System.out.println(p.toString());
		}
	} catch (HibernateException e) {
		// TODO Auto-generated catch block
		if(ts != null)
		{
			ts.rollback();
		}
		e.printStackTrace();
	}
	
}	

分页查询

@Test
	public void paraPageTest2(){

	// TODO Auto-generated method stub
	SessionFactory sf = null;		
	Session session = null;
	Transaction ts = null;		
	try {
			sf = HibernateUtil.getSessionFactory();
		session = sf.getCurrentSession();
		ts = session.beginTransaction();			
		String hql = "from Person";
		Query query = session.createQuery(hql);
		query.setFirstResult(1);
		query.setMaxResults(2);
		List<Person> list=query.list();
		for (Person p : list) {
			System.out.println(p.toString());
		}
	} catch (HibernateException e) {
		// TODO Auto-generated catch block
		if(ts != null)
		{
			ts.rollback();
		}
		e.printStackTrace();
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值