- 浏览: 49699 次
文章分类
最新评论
来一起看一下复杂查询时它为我们提供的接口。
JpaSpecificationExecutor.class
public interface JpaSpecificationExecutor<T> {
T findOne(Specification<T> spec);
List<T> findAll(Specification<T> spec);
Page<T> findAll(Specification<T> spec, Pageable pageable);
List<T> findAll(Specification<T> spec, Sort sort);
long count(Specification<T> spec);
}
在这个接口里面出现次数最多的类就是Specification.class,而这个类主要也就是围绕Specification来打造的,Specification.class是Spring Data JPA提供的一个查询规范,而你只需围绕这个规范来设置你的查询条件便可,我们来看一下Specification.class这个接口中有些什么东西。
Specification.class
Java代码 收藏代码
public interface Specification<T> {
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);
}
只有一个方法toPredicate,而其中的参数大家并不陌生,都是JPA规范中的,ROOT查询中的条件表达式、CriteriaQuery条件查询设计器、CriteriaBuilder条件查询构造器,而我们在使用复杂对象查询时,实现该方法用JPA去构造对象查询便可。
下面来看一个小例子:
Java代码 收藏代码
@Repository("userDao")
public interface IUserDao extends JpaSpecificationExecutor<User>{
}
仍然只是一个空接口,这次继承的是JpaSpecificationExecutor了。
再写一测试用例:查询用户表中name包含Sam的记录,并分页按照birth排倒序
Java代码 收藏代码
public class UserDaoTest {
private static ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
private static IUserDao userDao = (IUserDao) context.getBean("userDao");
public void findBySpecAndPaginate() {
Page<User> page = userDao.findAll(new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
root = query.from(User.class);
Path<String> nameExp = root.get("name");
return cb.like(nameExp, "%Sam%");
}
}, new PageRequest(1, 5, new Sort(Direction.DESC, new String[] { "birth" })));
StringBuilder stout = new StringBuilder(" 以下是姓名包含Sam人员信息 : ").append("\n");
stout.append("| 序号 | username | password | name | sex | birth |").append("\n");
int sortIndex = 1;
for (User u : page.getContent()) {
stout.append(" | ").append(sortIndex);
stout.append(" | ").append(u.getUsername());
stout.append(" | ").append(u.getPassword());
stout.append(" | ").append(u.getName());
stout.append(" | ").append(u.getSex());
stout.append(" | ").append(u.getBirth());
stout.append(" | \n");
sortIndex++;
}
System.err.println(stout);
}
public static void main(String[] args) {
UserDaoTest test = new UserDaoTest();
test.findBySpecAndPaginate();
}
}
当然,这只是一个测试,很简单的一个条件查询方法。你也可以设计复杂的查询来得到自己所需的结果,我这只是写一个很简单的方法来带大家入门。
JpaSpecificationExecutor.class
public interface JpaSpecificationExecutor<T> {
T findOne(Specification<T> spec);
List<T> findAll(Specification<T> spec);
Page<T> findAll(Specification<T> spec, Pageable pageable);
List<T> findAll(Specification<T> spec, Sort sort);
long count(Specification<T> spec);
}
在这个接口里面出现次数最多的类就是Specification.class,而这个类主要也就是围绕Specification来打造的,Specification.class是Spring Data JPA提供的一个查询规范,而你只需围绕这个规范来设置你的查询条件便可,我们来看一下Specification.class这个接口中有些什么东西。
Specification.class
Java代码 收藏代码
public interface Specification<T> {
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);
}
只有一个方法toPredicate,而其中的参数大家并不陌生,都是JPA规范中的,ROOT查询中的条件表达式、CriteriaQuery条件查询设计器、CriteriaBuilder条件查询构造器,而我们在使用复杂对象查询时,实现该方法用JPA去构造对象查询便可。
下面来看一个小例子:
Java代码 收藏代码
@Repository("userDao")
public interface IUserDao extends JpaSpecificationExecutor<User>{
}
仍然只是一个空接口,这次继承的是JpaSpecificationExecutor了。
再写一测试用例:查询用户表中name包含Sam的记录,并分页按照birth排倒序
Java代码 收藏代码
public class UserDaoTest {
private static ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
private static IUserDao userDao = (IUserDao) context.getBean("userDao");
public void findBySpecAndPaginate() {
Page<User> page = userDao.findAll(new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
root = query.from(User.class);
Path<String> nameExp = root.get("name");
return cb.like(nameExp, "%Sam%");
}
}, new PageRequest(1, 5, new Sort(Direction.DESC, new String[] { "birth" })));
StringBuilder stout = new StringBuilder(" 以下是姓名包含Sam人员信息 : ").append("\n");
stout.append("| 序号 | username | password | name | sex | birth |").append("\n");
int sortIndex = 1;
for (User u : page.getContent()) {
stout.append(" | ").append(sortIndex);
stout.append(" | ").append(u.getUsername());
stout.append(" | ").append(u.getPassword());
stout.append(" | ").append(u.getName());
stout.append(" | ").append(u.getSex());
stout.append(" | ").append(u.getBirth());
stout.append(" | \n");
sortIndex++;
}
System.err.println(stout);
}
public static void main(String[] args) {
UserDaoTest test = new UserDaoTest();
test.findBySpecAndPaginate();
}
}
当然,这只是一个测试,很简单的一个条件查询方法。你也可以设计复杂的查询来得到自己所需的结果,我这只是写一个很简单的方法来带大家入门。
发表评论
-
ObjectMapper对json结构字符串和Java对象的转换
2016-10-18 15:54 8197package com.gtstar.cbos.web.ccs ... -
JpaSpecificationExecutor.class
2016-10-14 16:57 651Java代码 收藏代码 public interf ... -
hibernate的Criteria Query(转)
2016-09-02 12:08 452当查询数据时,人们往往需要设置查询条件。在SQL或HQL语句中 ... -
Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
2016-08-18 13:45 1914引言: 接上一篇文章,对@RequestMapping进行地址 ... -
dbcTemplate详解
2016-08-12 09:16 5791、JdbcTemplate操作数据库 Spring对数据库的 ... -
Spring JdbcTemplate方法详解
2016-08-03 08:58 2381JdbcTemplate主要提供以下五类方法: •execut ... -
spring data jpa的动态查询封装
2016-07-15 11:31 2973最近使用spring data jpa做了两个项目,对于动态查 ... -
Spring Data 系列之JPA(一)
2016-07-15 10:36 500引入: Spring Data是SpringSource基 ... -
springMVC+spring+Hibernate的配置
2016-07-07 12:30 2531本实例采用springMvc冬眠 与 春天进行整合,用spri ... -
JdbcTemplate详解
2016-07-05 16:28 4721、JdbcTemplate操作数据库 Spring对数据库的 ... -
SpringMVC+Hibernate+Spring整合实例(一)
2016-07-05 09:17 528SpringMVC又一个漂亮的web框架,他与Struts2并 ... -
spring关于“transactionAttributes”的相关配置
2016-07-05 09:15 486spring关于“transactionAttri ... -
springMVC 参数传递
2016-07-01 09:39 526SpringMVC的各种参数绑定方式 1. 基本数据类 ...
相关推荐
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...
赠送jar包:spring-data-jpa-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-jpa-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-jpa-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-data-jpa...
1. **Repository Abstraction**:这是 Spring Data JPA 的核心特性之一。它提供了一种声明式的数据访问接口,允许开发者定义自定义的查询方法,而不需要手动编写 SQL 或者 HQL(Hibernate Query Language)。例如,...
Spring Data JPA则是在JPA之上构建的一层抽象,它扩展了JPA的功能,提供了更多的便利。例如,Spring Data JPA支持自动化的查询生成,只需定义Repository接口,无需编写任何实现代码,就可以执行CRUD(创建、读取、...
spring data jpa最新版本1.8.0,包含了spring-data-jpa-1.8.0.RELEASE.jar,spring-data-jpa-1.8.0.RELEASE-javadoc.jar以及 spring-data-jpa-1.8.0.RELEASE-sources.jar文档和源代码
#### 二、Spring-data-jpa 与 Spring 整合 Spring-data-jpa 与 Spring 的整合非常紧密,它利用 Spring 的依赖注入和事务管理功能,使得开发者可以轻松地在应用程序中集成数据访问逻辑。下面将详细介绍整合的关键...
Spring MVC、Spring 和 Spring Data JPA 是 Java 开发中非常重要的三个框架,它们共同构建了一个强大的企业级应用开发环境。Spring MVC 是一个用于构建 Web 应用的模型-视图-控制器(MVC)框架,Spring 提供了依赖...
Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...
赠送jar包:spring-data-jpa-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-jpa-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-jpa-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-data-jpa...
技术架构:SpringMVC3+Spring3.1.2+Spring Data JPA+Maven 声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&...
**Spring Data JPA 深度解析** Spring Data JPA 是 Spring Framework 的一个重要模块,它为 Java Persistence API (JPA) 提供了便捷的数据访问层。这个框架简化了数据库操作,使得开发人员能够以声明式的方式处理...
Spring Data JPA 的核心概念之一是Repositories,它定义了一组接口,这些接口通过继承自Spring Data JPA提供的接口,如`CrudRepository`或`PagingAndSortingRepository`,来实现数据访问层的操作。开发者只需要定义...
这是整合SpringMVC+Spring+SpringDataJPA+Hibernate简单的实现登录的功能,用的是mysql数据库,这是一个web Project 如果你用的是JavaEE6那么你要注意bean-validator.jar和weld-osgi-bundle.jar与slf4j的jar包冲突。...
《Spring Data JPA从入门到精通》是一本深入解析Spring Data JPA的书籍,它以Spring Boot框架为核心,旨在帮助读者全面理解并熟练运用Spring Data JPA进行数据库操作。Spring Data JPA是Spring Framework的一个模块...
Spring Data JPA 是一个由 Spring 框架提供的强大库,它极大地简化了基于 Java Persistence API (JPA) 的数据库访问。JPA 是 Java 平台上的标准 ORM(对象关系映射)规范,允许开发者使用面向对象的方式处理数据库...
Spring Data JPA 是一个基于 Java 的开源框架,它属于 Spring Data 家族的一部分,旨在简化 Java 应用中的数据访问层代码,特别针对基于 JPA(Java Persistence API)的数据持久化操作。本教程将详细介绍 Spring ...
在现代Java Web开发中,"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA"是一个常见的架构组合,被广泛应用于构建企业级应用程序。这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心...