`

hibernate查询的6种方法

 
阅读更多

hibernate查询的6种方法。分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询

 

 

 

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

 

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;
 }

适用情况:面向对象操作。

 

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,有一定缺陷。

 

 

<----demo------>

String sql="select p.id,p.name,p.smallPic,p.biggerPic from publish p where p.publishCatid="+catId+" order by p.hit desc";
                return session.createSQLQuery(sql)
                .setMaxResults(pageSize)
                .setFirstResult((pageNo - 1) * pageSize)
                .setResultTransformer(Transformers.aliasToBean(Publish.class)).list();

 

//Publish是在实体Publish里面包含有4个参数的构造方法,可以直接用来查询实体类的部分属性

Query query=session.createQuery("select new Publish(id,name,smallPic,biggerPic) from Publish order by hit desc"); 
                query.setMaxResults(pageSize);
                query.setFirstResult((pageNo - 1) * pageSize);
                return query.list();

 

 

 

 

 

 

分享到:
评论

相关推荐

    超好用的hibernate查询工具类

    一个超好用的Hibernate查询工具类通常会封装一些常见的查询方法,例如根据ID获取单个对象、根据条件获取对象列表、分页查询等。这样的工具类可以大大减少代码重复,提高代码的可读性和可维护性。 以下是一些可能...

    Hibernate查询方式代码示例

    **Hibernate查询方式详解** 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query ...

    hibernate查询详解

    hibernate查询详解 在Java开发中,Hibernate作为一款强大的ORM(Object-Relational Mapping)框架,极大地简化了数据库操作。本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询...

    小码哥Hibernate封装的查询方法的皮毛介绍共4页.p

    总的来说,这份“小码哥Hibernate封装的查询方法的皮毛介绍”会涵盖Hibernate查询的基础知识和实践技巧,对于想要提升Java后端开发能力的程序员来说是一份宝贵的资料。通过深入学习和实践,可以提高数据库操作的效率...

    Hibernate操作数据库的方法

    查询可以通过 Criteria API 或 HQL(Hibernate Query Language)进行。以下是一个简单的 Criteria 查询示例: //取得 SessionFactory 实例SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //...

    Hibernate 多表连接分页查询示范项目

    6. **执行查询**:调用 list() 或 scroll() 方法执行查询,获取结果集。 7. **处理结果**:遍历查询结果,将数据绑定到视图或者进一步处理。 总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示...

    hibernate的多态查询

    5. **多态查询的实现**:Hibernate支持使用`DetachedCriteria`或`Criteria` API来进行多态查询,通过`createCriteria()`方法指定父类,并使用`add(Restrictions.in("property", values))`等方法来限制查询条件。...

    hibernate常用方法集合

    Hibernate提供了两种主要的查询方式:HQL(Hibernate Query Language)和Criteria API。HQL是面向对象的查询语言,类似SQL但与数据库无关。Criteria API提供了一种更面向对象的方式来构建查询,无需编写字符串查询...

    Hibernate持久层方法汇总

    - `find()`方法提供了基于HQL(Hibernate查询语言)或者SQL的查询功能。它可以接收一个查询字符串和参数,返回一个结果列表,可以是单个对象,List,Set等。这种方法比较灵活,支持复杂的查询条件和关联操作。 3. ...

    Struts和Hibernate分页及查询

    在分页查询中,Hibernate提供了一种称为HQL(Hibernate Query Language)的SQL方言,可以方便地实现复杂的查询,包括分页查询。此外,Hibernate还支持Criteria查询,这是一种更加面向对象的查询方式,同样可以实现...

    hibernate分页查询功能

    在`getUser(int offset, int length)`方法中,我们构建HQL(Hibernate Query Language)查询语句,从User表中选取所有记录。使用Session的`createQuery(String hql)`方法创建Query对象,然后设置查询参数,通过`...

    Hibernate方法的实现

    本篇将深入探讨Hibernate方法的实现,包括其基本概念、配置、实体类、会话工厂以及各种操作数据库的方法。 1. **Hibernate基础** Hibernate是基于Java的持久层框架,通过XML配置文件或注解来定义对象与数据库表...

    Hibernate_query查询数据表中部分字段.

    以上就是使用Hibernate查询数据表中部分字段的方法。在实际应用中,根据项目需求和性能考虑,可以选择合适的方式进行查询。同时,要注意优化查询,避免全表扫描,减少对数据库的压力。学习和熟练掌握这些技术,将有...

    hibernate公共查询

    6. **排序查询**:`Order`接口可以用来设置查询结果的排序,`Criteria`提供`addOrder()`方法添加排序规则。 7. **事务管理**:为了确保数据的一致性,公共查询类中的每个方法应包裹在`Transaction`中,处理异常时...

    Hibernate教程24_Hibernate的补充_list与iterator

    本教程将重点讲解在使用Hibernate时,如何处理查询结果集合,特别是通过`list()`和`iterator()`方法进行数据迭代的操作。 【描述】"http://blog.csdn.net/e421083458/article/details/8794127" 这个链接指向的是一...

    hibernate关联查询

    Criteria API则提供了一种更面向API的方式,允许动态构建查询: ```java CriteriaBuilder cb = session.getCriteriaBuilder(); CriteriaQuery&lt;User&gt; cq = cb.createQuery(User.class); Root&lt;User&gt; root = cq.from...

    hibernate必须包/教程/查询

    "hibernate多种查询方法"则表明教程会涉及HQL(Hibernate查询语言)、Criteria API、Query API以及可能的Native SQL查询。 **Hibernate框架核心知识点** 1. **对象关系映射(ORM)**: Hibernate是ORM工具,它允许...

    hibernate3 hibernate3

    2. 支持复杂查询:除了HQL和Criteria API,Hibernate还支持原生SQL查询,以处理更复杂的查询需求。 3. 数据缓存:通过二级缓存机制,提高数据访问效率,减少对数据库的直接访问。 4. 支持事务:提供了事务管理和...

Global site tag (gtag.js) - Google Analytics