`

Hibernate六种查询方式

阅读更多

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