Hibernate检索方式浅记

今天学习了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的检索方式,并记录,以便温故 -------------
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值