`
669098238
  • 浏览: 6529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[转]六种方式实现hibernate查询,及IDE推荐

阅读更多
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,有一定缺陷。



**************精品软件推荐:NetBeans6.5 java和PHP开发人员的利器*****************

程序员杂志上robbin推荐了这个IDE,于是昨天下载了一个,个人感觉很好用。以下是我觉得比较好的地方:

NetBeans6.5(最新版)是一个免费的IDE工具,很利于推广。

基于JDK5和6,基于tomcat6,mysql5。

支持插件,有完美汉化的开发环境,利于新手使用。

目前支持J2SE,J2EE(JSF,EJB,Hibernate,Spring,JPA),J2ME,
PHP,Ruby,C/C++,Groovy,JavaFX,js......的开发。

C/C++需要自己添加配置,默认不支持编译。Ruby默认有内置解析器。

别的支持有待尝试。

具备自动提示,但是感知速度较慢,不够强。

xml配置文件操作智能化,方便开发。

内存占用少160MB左右,软件大小不到250MB
分享到:
评论

相关推荐

    三种查询方式跟踪Hibernate源码

    本文将详细阐述通过三种查询方式跟踪Hibernate源码的方法,帮助开发者更好地掌握其工作原理。 首先,我们来看第一种查询方式:HQL(Hibernate Query Language)查询。HQL是Hibernate专有的SQL方言,允许开发者以...

    Hibernate基本实现

    2. **Criteria API**:更面向对象的查询方式,提供了一种不依赖于SQL语法的查询手段。 ```java Criteria criteria = session.createCriteria(User.class); List&lt;User&gt; users = criteria.list(); ``` 3. **QBC...

    hibernate search全文索引的创建及查询

    总的来说,Hibernate Search提供了一种方便的方式,让开发者在Java应用中实现高效的全文搜索。通过合理的配置和使用,它可以极大地提升用户在大量数据中的查找体验。理解并熟练运用全文索引的创建和查询,是提高应用...

    HibernateTools-3.2.4

    2. **代码生成器(Code Generator)**:提供了一种方式来自动创建基于Hibernate的持久层代码,包括实体类、映射文件、DAO和Service层代码。 3. **HQL和SQL查询编辑器**:提供了集成的HQL(Hibernate Query Language...

    Hibernate中,利用Criteria查询容器实现sql的写法

    在Java的持久化框架Hibernate中,Criteria API是一种用于构建动态查询的强大工具,它允许开发者以对象化的方式构建SQL语句,而无需直接编写SQL代码。本篇将详细讲解如何在Hibernate中利用Criteria查询来实现类似SQL...

    Hibernate_QBC和Hibernate_QBE

    Query By Criteria(QBC)是一种基于对象的查询方式,它允许开发者通过构建Criteria对象来描述查询条件,然后由Hibernate自动转换为相应的SQL语句执行。这种方式提供了比HQL(Hibernate Query Language)更灵活的...

    springMvc+Hibernate实现的一个问题管理系统

    在本系统中,Hibernate被用来处理问题的增删改查等数据库操作,提供了一种声明式的方式处理数据持久化。 构建这样的问题管理系统,我们需要以下关键步骤: 1. **环境配置**:首先,确保已经安装了Java、Maven或...

    Hibernate 源代码及重要说明

    1. **Query与Criteria API**: Query API用于编写HQL(Hibernate查询语言),Criteria API则提供了更加面向对象的查询方式。 2. **Transaction管理**: Hibernate提供了一套事务处理机制,通过Session的begin...

    struts2 hibernate 实现无限级联 树形分类

    Struts2和Hibernate是两种非常重要的Java Web开发框架,它们在构建高效、可维护的Web应用程序中发挥着关键作用。Struts2是一个MVC(Model-View-Controller)框架,负责处理用户请求并协调应用程序的各个部分,而...

    Hibernate5.2.8提取包

    - **Hibernate EntityManager**:它是JPA(Java Persistence API)的实现,提供了一种标准的方式来管理持久性对象。 - **Hibernate Tools**:提供了IDE集成,如Hibernate逆向工程,可以自动生成实体类和映射文件。...

    struts2+hibernate+mysql实现注册登录

    通过实践,可以学习到Struts2的拦截器、结果类型、表单验证等特性,Hibernate的实体管理、会话工厂、查询语言(HQL)等概念,以及MySQL的基本操作和数据库设计原则。同时,还能提升对MVC模式和Java Web开发流程的...

    hibernate3 jar包

    2. **Hibernate Criteria API**:一种更高级的查询方式,允许开发者在运行时动态构建查询,提供了一种类型安全的API。 3. **Hibernate Query Language (HQL)**:Hibernate的特定领域语言,类似于SQL,但针对对象...

    在eclipse中使用hibernate

    - **HQL查询语言**:Hibernate引入了HQL(Hibernate Query Language),这是一种类似于SQL的查询语言,但它与Java对象紧密结合,提供了更为丰富的查询功能。 - **XML映射文件**:Hibernate通过XML映射文件定义了实体类...

    Hibernate.3.6.10帮助文档

    5. **查询语言HQL**:Hibernate Query Language,是Hibernate提供的一种面向对象的查询语言,类似于SQL,但更贴近于Java对象。 6. ** Criteria查询**:一种动态构建查询的方法,允许在运行时构建查询,提供了更灵活...

    Hibernate 显示数据库数据

    它包含了查询的实现,比如通过SessionFactory获取Session,创建Criteria或HQL查询,执行查询,然后在控制台打印结果。 通过这个项目,初学者可以了解并实践Hibernate的基本操作,为进一步学习和掌握Hibernate提供...

    hibernate相关插件全集

    这个扩展包可能包括了如Hibernate Search(用于实现全文搜索)、Hibernate Criteria Enhancer(增强Criteria查询功能)、Hibernate Tree(支持树形结构的数据模型)等组件。这些扩展使得Hibernate在应对特定需求时...

    Struts2+Spring2+Hibernate3实现登录

    这个项目是一个基于SSH的登录实现,使用Oracle数据库,并且仅依赖一张由Hibernate配置自动生成的表。对于初学者来说,这是一个很好的实践案例,能够帮助理解如何将这三个框架集成并应用于实际的用户认证场景。 首先...

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    hibernate-release-4.3.7

    Hibernate 4.3.7实现了JPA 2.1规范,提供了一种统一的访问和管理持久化对象的方式。 3. **HQL和Criteria API**:这两者是Hibernate提供的查询机制。HQL是一种面向对象的查询语言,类似于SQL,但操作的是对象而非表...

    Hibernate4

    **Hibernate** 是一个面向 Java 领域的持久化框架,它属于 ORM(Object-Relational Mapping,对象关系映射)的一种实现方式。所谓“持久化”,通常指的是将程序运行时的数据状态保存至磁盘等持久性存储设备的过程,...

Global site tag (gtag.js) - Google Analytics