(Hibernate学习篇) Hibernate 的查询与更新

            Hibernate框架虽然提供Session接口的get和load方法装载持久化对象。但这只是根据主键来检索数据,局限性很大。为止Hibernate框架提供了很多强大的查询技术这些技术包括标准(Criteria)查询API和HQL,除此之外,Hibernate框架还支持使用SQL,这些使Hibernate框架在操作数据库方面根据的灵活。

第一:标准(Criteria)查询API

            使用标准(Criteria)查询API,就要用到org.hibernate.Criteria接口。通过Session地createCriteria()方法可以创建Criteria对象。如果想查询表中的数据,可以使用Criteria接口的llist方法,这个方法将以java.util.List对象的形式返回所有装载的持久化对象。

             实例代码:

            

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Session session = HibernateSessionFactory.getSession();  
		Criteria criteria=session.createCriteria(Student.class);
		criteria.setMaxResults(10);
		List<Student> list= criteria.list();
		for(Student stu:list){
			System.out.println("相关信息"+stu.getAge());
		}

	}

}

查询的约束条件

             在标准查询API中可以非常容易的使用Criteria接口的add方法为查询增加约束条件。每一个查询条件是一个SimpleException对象,由org,hibernate,criterion.Restrictions类的静态方法获得对应的SimpleException对象   

             

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Session session = HibernateSessionFactory.getSession();  
		Criteria criteria=session.createCriteria(Student.class);
		criteria.add(Restrictions.eq("id", 1));
		List<Student> list= criteria.list();
		for(Student stu:list){
			System.out.println("相关信息"+stu.getAge());
		}

	}

}


 

只获得一个持久化对象

         在某些情况下,只需要获得一条记录或一个持久化地对象。在这种情况下,可以使用Criteria接口的uniqueResult方法。这个方法返回一个Object对象,而不是一个List对象。如果未查到记录,uniqueResult方法返回为null,如果无法保证返回的结果集只有一条记录,可以使用setMaxResult方法将结果集的记录数设置为1.

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Session session = HibernateSessionFactory.getSession();  
		Criteria criteria=session.createCriteria(Student.class);
		criteria.setMaxResults(1);
		criteria.add(Restrictions.eq("id", 1));
		Student list= (Student) criteria.uniqueResult();		
		System.out.println("相关信息"+list.getAge());		

	}

}


对查询的结果进行相关排序

               在标准查询API中可以使用org.hibernate.criterion.Order类对查询的结果进行排序。Order类由两个静态方法:asc和desc。这两个方法都返回Object对象。使用这两个方法可以指定要排序的持久化对象的属性。

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Session session = HibernateSessionFactory.getSession();  
		Criteria criteria=session.createCriteria(Student.class);
		criteria.addOrder(Order.desc("id"));
		List<Student> list=  criteria.list();	
		for(Student stu:list){
			System.out.println("相关信息"+stu.getAge());	
		}
			

	}

}

第二 HQL和SQL

          HQL是hibernate框架提供的另一种操作数据的方式。其语法上非常接近SQL但它们不同的是HQL是面向对象,也就是HQL是操作持久化对象,而不是表。使用HQL操作数据库可以直接返回对应的持久化对象。另外hibernate框架也可以将SQL查询出来地数据转换为持久化对象。

        

          通过编程方式执行HQL语句首先要使用Session接口的createQuery方法建立 Query对象。然后使用Query对象的list方法得到满足的持久化对象。


 

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Session session = HibernateSessionFactory.getSession();  
//		Criteria criteria=session.createCriteria(Student.class);
//		criteria.addOrder(Order.desc("id"));
//		List<Student> list=  criteria.list();	
		Query query=session.createQuery(" from Student");
		List<Student> list=query.list();
		for(Student stu:list){
			System.out.println("相关信息"+stu.getAge());	
		}
			

	}

}


 

Select子句:选择返回属性

Select 子句要比From子句提供更多的控制。通过Select语句,可以选择返回的属性。如果使用Select语句,Hibernate就不会返回响应的持久化对象,而是根据情况返回不同类型的List对象。

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Session session = HibernateSessionFactory.getSession();  
//		Criteria criteria=session.createCriteria(Student.class);
//		criteria.addOrder(Order.desc("id"));
//		List<Student> list=  criteria.list();	
		Query query=session.createQuery(" select id ,name,age from Student");
		List<String> list=query.list();
		for(Object stu:list){
			Object[] properties=(Object[])stu;
			System.out.println("相关信息"+properties[0]+"--------"+properties[1]+"===="+properties[2]);	
		}
			

	}

}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值