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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值