今天学习了Hibernate检索方式:HQL检索,QBC检索,本地SQL检索
数据库:STUDENTS为表
类:Students.java
一、HQL检索是面向对象的,由Hibernate对其解析,然后根据对象-关系的映射信息来翻译成相应的SQL语句。HQL查询语句的主体是域模型中的类及类的属性。如Students持久化类名字,sname持久化类的属性名字。session.createQuery()
public void hqlRetrieval(){
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
Query query=session.createQuery("from Students where sname like ?");
query.setString(0, "Tom%");
List queryList=query.list();
/*
Query query2=session.createQuery("from Students where sname like :snamepar");
query2.setParameter("snamepar","Tom%");
List queryList2=query2.list();
long sidpar=20;
Query q3=session.createQuery("from Students where sname like :snamepar and sid>:sidpar");
q3.setParameter("sidpar",sidpar);
q3.setParameter("snamepar","Tom%");
List queryList3=query3.list();
*/
Iterator it=queryList.iterator();
while(it.hasNext()){
Students stud=(Students)it.next();
System.out.println(stud.getSid()+" "+stud.getSname()+" "+stud.getSsex());
}
tx.commit();
session.close();
}
二、本地SQL检索方式,用sql语句查询,以对象数组进行存储。 session.createSQLQuery()
有的应用程序需要根据底层数据库的SQL方言,来生成一些特殊的查询语句。
public void sqlRetrieval(){
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
Query query=session.createSQLQuery("select * from STUDENTS where sname like :newName");
query.setString("newName", "Tom%");
List queryList=query.list();
for(Iterator it=queryList.iterator();it.hasNext();){
Object[] obj=(Object[])it.next();
for(int i=0;i<obj.length;i++){
System.out.println(obj[i]);
}
}
tx.commit();
session.close();
}
使用addEntity()方法将SQL表的别名和实体类联系起来,并且确定查询结果集的形态
public void sqlTohqlRetrieval(){
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
Query query=session.createSQLQuery("select * from STUDENTS where sname like :newName")
.addEntity(Students.class);
query.setString("newName", "Tom%");
List queryList=query.list();
for(Iterator it=queryList.iterator();it.hasNext();){
Students stud=(Students)it.next();
System.out.println(stud.getSid()+" "+stud.getSname()+" "+stud.getSsex());
}
tx.commit();
session.close();
}
三、QBC检索,支持在运行时动态生成查询语句,由Criteria接口,Criterion接口和Restrictions类组成
public void qbcRetrieval(){
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
Criteria criteria=session.createCriteria(Students.class);
Criterion con1=Restrictions.like("sname", "Tom%");
Criterion con2=Restrictions.gt("sid",new Long(6));
criteria=criteria.add(con1);
criteria=criteria.add(con2);
List resultList=criteria.list();
// List resultList2=session.createCriteria(Students.class)
// .add(Restrictions.like("sname", "Tom%"))
// .add(Restrictions.gt("sid", new Long(6)))
// .list();
Iterator it=resultList.iterator();
while(it.hasNext()){
Students stud=(Students)it.next();
System.out.println(stud.getSname()+" "+stud.getSsex());
}
tx.commit();
session.close();
}
1、调用Session的CreateCriteria()方法创建一个Criteria对象
2、设定查询条件。Restrictions设定查询条件的静态方法,并返回Ctriterion实例,每个实例代表一个查询条件,利用add()方法加入
3、调用Criteria的List()方法执行查询语句.
------------ 初始学习Hibernate的检索方式,并记录,以便温故 -------------