hibernate常用的两种查询hql和criteria

本文详细解析Hibernate中两种常用查询方式:Criteria和HQL,针对其特点、适用场景及优缺点进行对比分析,旨在帮助开发者在复杂查询场景下做出更合理的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate给人的感觉真的是又爱又恨,倒也不是说它不好用,主要还是因为精通它的人太少了加之复杂的查询也做不了,只能勉强做一些简单或者性能要求不是特别高的项目或产品。这次打算分享下我学习hibernate最常用的两种查询的心得。使用hibernate做复杂的查询一直存在争议,hibernate虽然也支持sql语句查询但是使用起来不是那么方便,也不是很好掌握。个人建议就是做复杂查询的时候就不要用hibernate了,可以使用ibatis或者直接使用jdbc来实现相应的功能。现在hibernate最常用的查询方式有两种分别是hql和criteria。

一  Criteria查询方式

这种查询方式比较面向对象一些,我也比较喜欢使用这种查询方式,因为它不用写任何的sql或者hql语句

public void testCriteria() {
		Session ses=null;
    	
    	try{
    		ses=HibernateUtil.getSession();
    		Object[] t={1,2};
    		Criteria c=ses.createCriteria(Article.class);
    		c.add(Restrictions.in("id",t));
    		List<Article> all=c.list();
    		Iterator<Article> it=all.iterator();
    		while(it.hasNext()){
    			Article article=it.next();
    			System.out.println(article.getName());
    		}
    	}catch(Exception e){
    		e.printStackTrace();
    	}finally{
    		if(ses!=null){
    			ses.close();  
    		}
    	}
    	
	}

目前criteria提供的查询条件已经可以满足基本的查询要求,但是复杂的查询还是不怎么行得通


二  hql的查询方式

这种方式和原生的sql语句有一定的差异,复杂度也高得多

public void testHql() {
		Session ses=null;
    	
    	try{
    		ses=HibernateUtil.getSession();
    		String hql="from Article A where A.id>1";
    		Query q=ses.createQuery(hql);
    		List<Article> all=q.list();
    		Iterator<Article> it=all.iterator();
    		while(it.hasNext()){
    			Article article=it.next();
    			System.out.println(article.getName());
    		}
    	}catch(Exception e){
    		e.printStackTrace();
    	}finally{
    		if(ses!=null){
    			ses.close();  
    		}
    	}
    	
	}

hql对于稍微复杂的查询虽然可以应对,但是由于hql和原生的sql差异较大,书写的时候有一定困难


hibernate在很多方面有一统天下的势头,但是应对复杂的业务逻辑或者报表查询,hibernate的缺点却暴露的一览无遗,hibernate虽然支持sql查询但是用起来觉得很别扭.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值