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查询工具类通常会封装一些常见的查询方法,例如根据ID获取单个对象、根据条件获取对象列表、分页查询等。这样的工具类可以大大减少代码重复,提高代码的可读性和可维护性。 以下是一些可能...
**Hibernate查询方式详解** 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query ...
hibernate查询详解 在Java开发中,Hibernate作为一款强大的ORM(Object-Relational Mapping)框架,极大地简化了数据库操作。本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询...
总的来说,这份“小码哥Hibernate封装的查询方法的皮毛介绍”会涵盖Hibernate查询的基础知识和实践技巧,对于想要提升Java后端开发能力的程序员来说是一份宝贵的资料。通过深入学习和实践,可以提高数据库操作的效率...
查询可以通过 Criteria API 或 HQL(Hibernate Query Language)进行。以下是一个简单的 Criteria 查询示例: //取得 SessionFactory 实例SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //...
6. **执行查询**:调用 list() 或 scroll() 方法执行查询,获取结果集。 7. **处理结果**:遍历查询结果,将数据绑定到视图或者进一步处理。 总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示...
5. **多态查询的实现**:Hibernate支持使用`DetachedCriteria`或`Criteria` API来进行多态查询,通过`createCriteria()`方法指定父类,并使用`add(Restrictions.in("property", values))`等方法来限制查询条件。...
Hibernate提供了两种主要的查询方式:HQL(Hibernate Query Language)和Criteria API。HQL是面向对象的查询语言,类似SQL但与数据库无关。Criteria API提供了一种更面向对象的方式来构建查询,无需编写字符串查询...
- `find()`方法提供了基于HQL(Hibernate查询语言)或者SQL的查询功能。它可以接收一个查询字符串和参数,返回一个结果列表,可以是单个对象,List,Set等。这种方法比较灵活,支持复杂的查询条件和关联操作。 3. ...
在分页查询中,Hibernate提供了一种称为HQL(Hibernate Query Language)的SQL方言,可以方便地实现复杂的查询,包括分页查询。此外,Hibernate还支持Criteria查询,这是一种更加面向对象的查询方式,同样可以实现...
在`getUser(int offset, int length)`方法中,我们构建HQL(Hibernate Query Language)查询语句,从User表中选取所有记录。使用Session的`createQuery(String hql)`方法创建Query对象,然后设置查询参数,通过`...
本篇将深入探讨Hibernate方法的实现,包括其基本概念、配置、实体类、会话工厂以及各种操作数据库的方法。 1. **Hibernate基础** Hibernate是基于Java的持久层框架,通过XML配置文件或注解来定义对象与数据库表...
以上就是使用Hibernate查询数据表中部分字段的方法。在实际应用中,根据项目需求和性能考虑,可以选择合适的方式进行查询。同时,要注意优化查询,避免全表扫描,减少对数据库的压力。学习和熟练掌握这些技术,将有...
6. **排序查询**:`Order`接口可以用来设置查询结果的排序,`Criteria`提供`addOrder()`方法添加排序规则。 7. **事务管理**:为了确保数据的一致性,公共查询类中的每个方法应包裹在`Transaction`中,处理异常时...
本教程将重点讲解在使用Hibernate时,如何处理查询结果集合,特别是通过`list()`和`iterator()`方法进行数据迭代的操作。 【描述】"http://blog.csdn.net/e421083458/article/details/8794127" 这个链接指向的是一...
Criteria API则提供了一种更面向API的方式,允许动态构建查询: ```java CriteriaBuilder cb = session.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from...
"hibernate多种查询方法"则表明教程会涉及HQL(Hibernate查询语言)、Criteria API、Query API以及可能的Native SQL查询。 **Hibernate框架核心知识点** 1. **对象关系映射(ORM)**: Hibernate是ORM工具,它允许...
2. 支持复杂查询:除了HQL和Criteria API,Hibernate还支持原生SQL查询,以处理更复杂的查询需求。 3. 数据缓存:通过二级缓存机制,提高数据访问效率,减少对数据库的直接访问。 4. 支持事务:提供了事务管理和...