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