`

Spring Data 系列之JPA(二)

阅读更多
来一起看一下复杂查询时它为我们提供的接口。

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



当然,这只是一个测试,很简单的一个条件查询方法。你也可以设计复杂的查询来得到自己所需的结果,我这只是写一个很简单的方法来带大家入门。


分享到:
评论

相关推荐

    Spring Data JPA API(Spring Data JPA 开发文档).CHM

    Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。

    spring注解+spring data jpa文档+JPA文档.rar

    Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...

    spring-data-jpa-2.0.9.RELEASE-API文档-中文版.zip

    赠送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...

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    1. **Repository Abstraction**:这是 Spring Data JPA 的核心特性之一。它提供了一种声明式的数据访问接口,允许开发者定义自定义的查询方法,而不需要手动编写 SQL 或者 HQL(Hibernate Query Language)。例如,...

    Spring Data JPA 笔记

    Spring Data JPA则是在JPA之上构建的一层抽象,它扩展了JPA的功能,提供了更多的便利。例如,Spring Data JPA支持自动化的查询生成,只需定义Repository接口,无需编写任何实现代码,就可以执行CRUD(创建、读取、...

    spring data jpa jar包

    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常用教程.pdf

    #### 二、Spring-data-jpa 与 Spring 整合 Spring-data-jpa 与 Spring 的整合非常紧密,它利用 Spring 的依赖注入和事务管理功能,使得开发者可以轻松地在应用程序中集成数据访问逻辑。下面将详细介绍整合的关键...

    Spring MVC+Spring+Spring data JPA

    Spring MVC、Spring 和 Spring Data JPA 是 Java 开发中非常重要的三个框架,它们共同构建了一个强大的企业级应用开发环境。Spring MVC 是一个用于构建 Web 应用的模型-视图-控制器(MVC)框架,Spring 提供了依赖...

    Spring Data JPA的优点和难点.pdf

    Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...

    spring-data-jpa-2.0.9.RELEASE-API文档-中英对照版.zip

    赠送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...

    SpringMVC+Spring+Spring Data JPA+Maven

    技术架构:SpringMVC3+Spring3.1.2+Spring Data JPA+Maven 声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&...

    Spring Data JPA.zip

    **Spring Data JPA 深度解析** Spring Data JPA 是 Spring Framework 的一个重要模块,它为 Java Persistence API (JPA) 提供了便捷的数据访问层。这个框架简化了数据库操作,使得开发人员能够以声明式的方式处理...

    spring-data-jpa

    Spring Data JPA 的核心概念之一是Repositories,它定义了一组接口,这些接口通过继承自Spring Data JPA提供的接口,如`CrudRepository`或`PagingAndSortingRepository`,来实现数据访问层的操作。开发者只需要定义...

    SpringMVC+Spring+SpringDataJPA+Hibernate整合登录的效果

    这是整合SpringMVC+Spring+SpringDataJPA+Hibernate简单的实现登录的功能,用的是mysql数据库,这是一个web Project 如果你用的是JavaEE6那么你要注意bean-validator.jar和weld-osgi-bundle.jar与slf4j的jar包冲突。...

    Spring Data JPA从入门到精通

    《Spring Data JPA从入门到精通》是一本深入解析Spring Data JPA的书籍,它以Spring Boot框架为核心,旨在帮助读者全面理解并熟练运用Spring Data JPA进行数据库操作。Spring Data JPA是Spring Framework的一个模块...

    Spring Data JPA 简化 JPA 开发

    Spring Data JPA 是一个由 Spring 框架提供的强大库,它极大地简化了基于 Java Persistence API (JPA) 的数据库访问。JPA 是 Java 平台上的标准 ORM(对象关系映射)规范,允许开发者使用面向对象的方式处理数据库...

    spring data jpa 教程

    Spring Data JPA 是一个基于 Java 的开源框架,它属于 Spring Data 家族的一部分,旨在简化 Java 应用中的数据访问层代码,特别针对基于 JPA(Java Persistence API)的数据持久化操作。本教程将详细介绍 Spring ...

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA

    在现代Java Web开发中,"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA"是一个常见的架构组合,被广泛应用于构建企业级应用程序。这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心...

Global site tag (gtag.js) - Google Analytics