33、hql入门

学习目标:

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();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值