hql入门

发表时间:2017-05-17 17:29:06 浏览量( 26 ) 留言数( 0 )

学习目标:

1、什么事hql

2、如何使用hql


学习过程:

一、什么是hql

hql是hibernate的查询语言,和sql语言非常类似,不过操作的对象而不是表,最终hql会根据当前hibernate的方言转换成为对应的sql语言,也就是说hql是hibernate对sql语言的抽象,它本身是不能直接操作数据库的。

二、使用hibernate应用hql

如果直接使用hibernate那么我们可以先得到Session,然后通过Session建立Query对象,最后通过Query就可以查询数据库了,Query类有点像原始的jdbc的Statement类。使用Hibernate查询示例如下:

public class Run1 {
	
	public static void main(String[] args) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		// 开启一个事务
        session.beginTransaction();
 
      //from Pojo类
        String hql="from Post";
        Query query=session.createQuery(hql);
         
        List<Post> posts=query.list();
         
        for(Post post:posts){
            System.out.println(post.getPostName());
        }
 
        // 提交事物
        session.getTransaction().commit();
        session.close();
        
        HibernateUtil.getSessionFactory().close();
	}

}

三、投影查询(属性查询)

大家可以看到hibernate对查询支持非常好,直接返回的就已经是pojo对象,但是有的时候我们只是想查询对象的几个属性,而不是查询全部,在学习sql时,我们知道这称为投影查询,而在hibernate称为属性查询,属性查询返回的每一个列表都是一个数组。示例代码如下:

//投影查询
public class Run2 {
	public static void main(String[] args) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		// 开启一个事务
        session.beginTransaction();
 
        Query query=session.createQuery("select p.postName,p.postId from Post p");
		
		List resuts=query.list();
		
		for(int i=0;i<resuts.size();i++){
			Object [] objects=(Object [])resuts.get(i);
			System.out.println(objects[0]+":"+objects[1]);
		}
 
        // 提交事物
        session.getTransaction().commit();
        session.close();
        
        HibernateUtil.getSessionFactory().close();
	}
}