您的位置:首页 > 其它

Hibernate检索方式浅记

2015-08-27 10:17 281 查看
今天学习了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的检索方式,并记录,以便温故 -------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: