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

虾米姐 阅读:615 2021-04-01 10:25:36 评论:0

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


 

 

标签:hibernate
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号