Criteria對SQL進行封裝,讓開發人員可以用物件的方式來對資料庫進行操作,例如下面的查詢User表格中的所有資料:
Criteria criteria = session.createCriteria(User.class);
List users = criteria.list();
Iterator iterator = users.iterator();
System.out.println("id \t name/age");
while(iterator.hasNext()) {
User user = (User) iterator.next();
System.out.println(user.getId() +
" \t " + user.getName() +
"/" + user.getAge());
}
Hibernate實際上使用以下的SQL來查詢資料庫:
select this_.id as id0_, this_.name as name0_0_, this_.age as age0_0_ from user this_
Criteria實際上只是個容器,如果想要設定查詢條件,則要使用add()方法加入Restrictions的條件限制,例如查詢age大於20且小於40的資料:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.gt("age", new Integer(20)));
criteria.add(Restrictions.lt("age", new Integer(40)));
List users = criteria.list();
您也可以使用邏輯組合來進行查詢,例如結合age等於(eq)20或(or)age為空(isNull)的條件:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.or(
Restrictions.eq("age", new Integer(20)),
Restrictions.isNull("age")
));
List users = criteria.list();
也可以使用sqlRestriction()方法來提供SQL語法作限定查詢,例如查詢name以cater開頭的資料:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
List users = criteria.list();
其中alias將被替換為與User類別相關的名稱,而?將被替換為cater%,也就是第二個參數所提供的值,在SQL撰寫時,不必再寫WHERE,如果有多個查詢條件,例如BETWEEN子句的查詢,則可以如下:
Criteria criteria = session.createCriteria(User.class);
Integer[] ages = {new Integer(20), new Integer(40)};
Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};
criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));
List users = criteria.list();
Restrictions的幾個常用限定查詢方法如下表所示:
方法說明
Restrictions.eq |
等於 |
Restrictions.allEq |
使用Map,使用key/value進行多個等於的比對 |
Restrictions.gt |
大於 > |
Restrictions.ge |
大於等於 >= |
Restrictions.lt |
小於 < |
Restrictions.le |
小於等於 <= |
Restrictions.between |
對應SQL的BETWEEN子句 |
Restrictions.like |
對應SQL的LIKE子句 |
Restrictions.in |
對應SQL的in子句 |
Restrictions.and |
and關係 |
Restrictions.or |
or關係 |
Restrictions.sqlRestriction |
SQL限定查詢 |
分享到:
相关推荐
- **Hibernate**:通过注解或XML配置,将对象和表对应,提供了 Criteria 查询、HQL 查询等多种方式封装SQL。 ```java public List<User> getAllUsers() { Session session = sessionFactory.openSession(); try { ...
总的来说,Hibernate的分页查询封装涉及到对Criteria或HQL的熟练运用,以及对数据库查询优化的理解。合理地封装分页查询能提高代码的可复用性和可维护性,同时为用户提供更好的性能体验。在项目开发中,可以根据具体...
本主题将探讨如何在C#中进行不写SQL语句的数据库操作,实现对数据的增删改查功能。 首先,我们可以利用ORM(Object-Relational Mapping)框架来避免直接编写SQL。ORM框架允许开发者用面向对象的方式来操作数据库,...
除了基本的查询功能外,Criteria API还支持对查询结果进行聚合操作,即使用`Projections`来进行数据统计。`Projections`允许我们指定查询结果的列,并对这些列进行各种聚合操作,如求平均值、计数、最大值、最小值等...
`PaginationInterceptor`通常会自动计算总页数,根据请求的页码和每页数量对SQL进行修改,添加LIMIT或OFFSET子句,以实现数据库级别的分页。 接着是"PagingByCount.java"和"PagingByExampl.java",这两个类可能是...
这实际上就是将SQL语句“`SELECT * FROM t_user WHERE name='Erica' AND sex=1`”进行了面向对象的封装。 #### 三、模糊查询概述 模糊查询通常指的是在查询时使用类似于“%”这样的通配符来匹配不完全确定的字符串...
例如,在社交平台中,用户可以设置多种筛选条件来进行高级搜索,这时就需要动态生成SQL语句来进行数据查询。传统的做法是通过Map来传递查询条件,但这种方式存在明显的不足之处:Map只能传递查询字段名和对应的值,...
在提供的压缩包文件"NativeSQLTest"中,可能包含了作者对使用Hibernate进行Native SQL查询的一些实践案例或者测试代码。这将是一个很好的学习资源,可以深入理解如何在实际项目中应用Native SQL查询,解决复杂查询...
下面,我们将对Hibernate分页封装进行详细的介绍和分析。 1. 分页概述 在实际开发中,分页是非常常见的需求,例如,我们需要从数据库中检索出某个表中的所有记录,但是这些记录可能有成千上万条,這時候我们需要对...
3. **添加排序**:如果需要对结果进行排序,可以使用Criteria的createCriteria()或addOrder()方法设置排序规则。 4. **添加分组**:对于需要分组的查询,可以使用Criteria的setGroupBy()方法。 5. **执行查询**:...
在实际项目中,为了提高代码的复用性和可维护性,通常会对DAO层进行封装。本主题主要探讨的是如何使用泛型和反射技术来实现Hibernate对DAO的封装,从而创建一个通用的DAO模板,减少开发者重复编写CRUD(Create、Read...
Symfony框架中的Model Criteria是用于构建数据库查询的工具,它提供了面向对象的方式,通过criteria对象来封装查询条件和参数。在Symfony框架的应用中,_criteria_ 对象可与peer类的方法结合使用,比如 doSelect()、...
"自定义查询对象组件封装"就是这样一个实践,它涉及创建一个专门的组件,用于构建和解析查询条件,以便在表示层(通常是Web应用的前端)和后台(如服务层或数据访问层)之间进行通信。 首先,我们要理解查询对象的...
本篇将深入探讨如何利用注解和反射机制来封装一个支持一对多查询的 `BaseDao`。 首先,我们需要了解注解(Annotation)。注解是Java提供的一种元数据,它为编译器和工具提供了信息,可以用于代码验证、代码生成、...
5. **Criteria API与HQL的比较**:Criteria API更适合于动态生成查询,而HQL更适用于静态查询或者需要充分利用SQL语法的场景。选择哪种取决于项目需求和开发者偏好。 6. **查询优化**:封装查询方法不仅提高代码...
本文将深入探讨如何对Hibernate框架进行二次封装,进一步简化数据库操作。 一、理解Hibernate基础 Hibernate是Java领域中的一种持久化框架,它提供了一种在Java应用中管理关系数据库模型的机制。它通过映射Java类到...
本项目结合了这两者,通过C#编写了一个控制台程序,实现了对SQL Server 2005数据库的增删改操作。以下将详细阐述这个控制台程序的实现原理及相关的技术知识点。 首先,C#与SQL Server 2005的交互主要依赖于ADO.NET...
为了解决这个问题,我们可以利用JDBC的SQL分页来直接在数据库层面进行分页,从而减少内存消耗。 在给定的"SuperHibernateEntityDao.java"文件中,可能包含了一个自定义的DAO基类,该类扩展了Hibernate的通用DAO操作...
Hibernate是ORM(Object-Relational Mapping,对象关系映射)框架,它将Java对象与数据库表进行映射,实现了对数据库的透明操作。在分页查询中,Hibernate的Criteria、HQL(Hibernate Query Language)或SQL查询方式...
在这个基于Annotation并对DAO层封装具有分页功能的S2SH整合实例中,我们将探讨如何利用这些技术的特性来提高开发效率和代码可维护性。 首先,让我们深入了解一下Struts2。Struts2是基于MVC模式的开源Web应用框架,...