`
lei460597018
  • 浏览: 3739 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

hibernate的六种查询方式

 
阅读更多

 

hibernate的总结性随笔,从点到面,讲讲hibernate查询的6种方法。分别是HQL查询
,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询

           如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是
从一个点,让我们掌握6中方法,则提供了更多选择。每一种方法都有其适用的情况与前提。

 

HQL查询

HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:

 

static void query(String name){

  Session s=null;

  try{

   s=HibernateUtil.getSession();

   

   //from后面是对象,不是表名

   String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。

   Query query=s.createQuery(hql);

   query.setString("name", name);

   

   List<Admin> list=query.list();

   

   for(Admin admin:list){

    System.out.println(admin.getAname());

   }

  }finally{

   if(s!=null)

   s.close();

  }

 }

 适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。

 

对象化查询Criteria方法

static void cri(String name,String password){

  Session s=null;

  try{

   s=HibernateUtil.getSession();

   

   Criteria c=s.createCriteria(Admin.class);

   c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或

   c.add(Restrictions.eq("apassword", password));

   

   List<Admin> list=c.list();

   for(Admin admin:list){

    System.out.println(admin.getAname());

   }

  }finally{

   if(s!=null)

   s.close();

  }

 }

 适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。

 

动态分离查询DetachedCriteria

static List dc(DetachedCriteria dc) {



  Session s = HibernateUtil.getSession();

  Criteria c = dc.getExecutableCriteria(s);

  List rs = c.list();

  s.close();

  return rs;

 }

 

DetachedCriteria dc = DetachedCriteria.forClass(User.class);

  int id = 1;

  if (id != 0)

   dc.add(Restrictions.eq("id", id));

  Date age = new Date();

  if (age != null)

   dc.add(Restrictions.le("birthday", age));

  List users = dc(dc);

  System.out.println("离线查询返回结果:" + users);

 适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。  缺点:适用面较HQL有限。

例子查询

static List example(User user) {

  Session s = HibernateUtil.getSession();

  List<User> users = s.createCriteria(User.class).add(

    Example.create(user)).list();

  // List<User>

  // users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())

  // .createCriteria("child").add((Example.create(user))).list();

  return users;

 }

 适用情况:面向对象操作。   缺点:适用面较HQL有限,不推荐。


sql查询

static List sql() {



  Session s = HibernateUtil.getSession();

  Query q = s.createSQLQuery("select * from user").addEntity(User.class);

  List<User> rs = q.list();

  s.close();

  return rs;

 }

 适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法   缺点:破坏跨平台,不易维护,不面向对象。

命名查询

static List namedQuery(int id) {
  Session s = HibernateUtil.getSession();
  Query q = s.getNamedQuery("getUserById");
  q.setInteger("id", id);
  return q.list();
 }

 

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">



<hibernate-mapping>

    <class name="com.sy.vo.User" table="user" catalog="news">

    

 



    </class>

    <!-- 命名查询:定义查询条件 -->

    <query name="getUserById">

     <![CDATA[from User where id=:id]]>

    </query>

    <!-- 命名查询中使用sql,不推荐使用,影响跨数据库

    <sql-query name="getUserById2">

     <![CDATA[select * from User where ]]>

    </sql-query> -->

</hibernate-mapping>

 适用情况:万能方法,有点像ibatis轻量级框架的操作,方便维护。  缺点:不面向对象。基于hql和sql,有一定缺陷。

 

 

分享到:
评论

相关推荐

    六种方式实现hibernate查询

    Criteria是Hibernate提供的一种查询方式,使用面向对象的操作方式革新了以前的数据库操作方式。示例代码: ```java static void cri(String name,String password){ Session s=null; try{ s=HibernateUtil....

    hibernate多表联合查询

    在Hibernate中,可以使用以下几种方式来实现多表联合查询: - **HQL (Hibernate Query Language)** - **Criteria API** - **Native SQL** 本文将重点介绍如何使用HQL和Native SQL来实现多表联合查询。 #### 三、...

    Hibernate_query查询数据表中的一个字段.

    无论哪种查询方式,最后都会返回一个结果列表,你可以遍历这个列表来获取并处理查询到的`username`字段的值。 总结,Hibernate提供多种方式查询数据表中的字段,包括HQL、Criteria API和DetachedCriteria,选择合适...

    hibernateHQL关联查询

    Hibernate支持以下几种连接查询方式: 1. **内连接(Inner Join)**:`INNER JOIN` 或 `JOIN` ```java String hql = "SELECT s.stuName, e.examScore FROM Student s JOIN Exam e ON s.stuID = e.stuID"; ``` 2....

    hibernate实现动态SQL查询

    在Hibernate中,我们通常使用HQL(Hibernate Query Language)或Criteria API进行查询,但这些方式并不支持复杂的动态查询。为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,...

    hibernate查询方法

    Criteria API是Hibernate提供的另一种查询方式,它允许开发者通过构建对象化的查询条件来执行数据库查询。下面是如何使用Criteria API查找特定用户的示例: ```java Session session = sessionFactory.openSession...

    hibernate自定义查询

    Criteria API是Hibernate提供的另一种查询方式,它提供了更加面向对象的API,可以动态构建查询条件。下面是一个使用Criteria API的例子: ```java Session session = sessionFactory.openSession(); Criteria ...

    hibernateCriteria查询

    Hibernate Criteria 查询是一种强大的对象化查询方式,它为开发者提供了一种灵活而直观的方式来构建复杂的查询逻辑。与传统的SQL查询相比,Criteria查询更加面向对象,易于理解和维护。在Hibernate框架中,Criteria...

    hibernate的配置使用和各种查询

    - **基本用法**:Criteria API提供了更为灵活的查询方式,可以动态构建查询条件。 - **示例**: ```java Criteria criteria = session.createCriteria(Employee.class); criteria.add(Restrictions.eq("empName",...

    hibernateHQL基本查询

    HQL 提供了一种简洁高效的查询方式,不仅减少了代码量,还提高了代码的可读性和可维护性。通过上述示例,我们可以看到 HQL 在处理复杂查询时的强大功能。熟练掌握 HQL 将有助于开发者更好地利用 Hibernate 进行数据...

    hibernate-3.2源代码

    4. Criteria查询:提供了一种面向对象的方式来构建查询,比HQL更为灵活。 5. Query和Criteria API:提供了强大的查询能力,支持复杂的查询条件和结果集处理。 三、配置与初始化 Hibernate的配置文件(hibernate.cfg...

    hibernate 的createSQLQuery的几种用法

    Hibernate 的 createSQLQuery 的几种用法 Hibernate 的 createSQLQuery 是 Hibernate 框架中的一种强大且灵活的查询机制,它允许开发者使用...createSQLQuery 方法提供了多种灵活的查询方式,能够满足不同的查询需求。

    hibernate权威整理文档!

    【hibernate权威整理文档!...理解和掌握Hibernate的主要组件、配置以及查询方式,是Java开发者必备的技能之一。通过深入学习和实践,开发者可以更好地利用Hibernate来构建高效、稳定的持久层解决方案。

    hibernate分页查询

    如果默认的分页方式不能满足需求,例如在Oracle等不支持OFFSET的数据库中,可以自定义SQL查询实现分页。在Hibernate中,可以使用SQLQuery对象结合native SQL执行自定义分页。 六、优化分页性能 1. 使用索引:确保...

    struts+hibernate分页 模糊查询

    ### Struts 1.2与Hibernate 3结合实现分页模糊查询 在Web开发领域,Struts框架一直是MVC(Model-View-Controller)架构模式的一个典型代表,它可以帮助开发者更高效地构建出结构清晰、易于维护的应用程序。而...

    Hibernate知识点总结

    HQL支持面向对象的查询方式,例如查询特定属性、执行聚合操作等。通过HQL,开发者可以更自然地表达查询需求,同时减少SQL语句的编写工作量。 #### 六、检索策略 在Hibernate中,检索策略是指控制对象何时从数据库...

    hibernate3中文官方文档

    HQL 是 Hibernate 自定义的一种面向对象的查询语言,类似于 SQL,但更加面向对象。它可以方便地进行对象级别的查询,支持复杂的条件、分组、排序等操作,甚至能实现联接查询和子查询。 五、 Criteria 查询 除了 HQL...

    Hibernate Recipes

    3. **查询与检索**:涵盖各种查询方式(如HQL、Criteria API等),以及如何优化查询性能。 4. **高级特性**:探讨Hibernate的一些高级特性,比如缓存机制、事务处理等。 5. **错误处理与调试**:提供常见的错误处理...

    Hibernate 经典例子全

    这种关系在数据库中通常通过主键外键关联实现,Hibernate提供了多种方式来建立和维护这种关系,例如使用`@OneToOne`注解。 **五、懒加载和乐观锁** `hibernate_lazy_for_single_end`和`hibernate_optimistic_...

    hibernate api 3.6.0 javadoc

    Criteria API提供了一种更加面向对象的查询方式,可以动态构建查询条件,适合复杂的查询需求。Javadoc对这两种查询方式的使用方法和语法进行了详尽的阐述。 五、Caching与Transactions 缓存(Caching)是Hibernate...

Global site tag (gtag.js) - Google Analytics