`
a137268431
  • 浏览: 157813 次
文章分类
社区版块
存档分类
最新评论

Spring-data-jpa的动态查找案例

 
阅读更多

Spring Jpa 可根据条件查询方法有2种(目前只了解2种有知道其他的请回复谢谢)

一种就是使用@query方法拼写hql进行查找。

另外一种就是jpa封装好的Specification<class>(){}方法

第一种很常见一般会些sql的 看下api就了解了

下面要记录下第2种,近期使用过

先上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Override
@Transactional(readOnly=true)
publicPage<Question> questionList(finalString keyword,finalString knowledge,finalString type,finalString itemBankId,finalString gradeId,finalString subjectId,Pageable pageable) {
Page<Question> question = questionDao.findAll(newSpecification<Question>() {
@Override
publicPredicate toPredicate(Root<Question> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate predicate = cb.conjunction();
List<Expression<Boolean>> expressions = predicate.getExpressions();
if(StringUtils.isNotBlank(keyword)) {
expressions.add(cb.like(root.<String>get("keyword"),"%"+keyword+"%"));//关键字
}
if(StringUtils.isNotBlank(knowledge)) {
expressions.add(cb.like(root.<String>get("knowledge"),"%"+knowledge +"%"));//知识点
}
if(NumberUtils.isDigits(type)) {
expressions.add(cb.equal(root.<String>get("type"), type));//l类型
}
if(StringUtils.isNotBlank(itemBankId)) {
expressions.add(cb.equal(root.<String>get("puuid"), itemBankId));//父节点
}
if(NumberUtils.isDigits(gradeId)) {
expressions.add(cb.equal(root.<Grade>get("grade").<Long>get("id"), NumberUtils.toLong(gradeId)));//年级
}
if(NumberUtils.isDigits(subjectId)) {
expressions.add(cb.equal(root.<Subject>get("subject").<Long>get("id"), NumberUtils.toLong(subjectId)));//学科
}
expressions.add(cb.equal(root.<Long>get("deleteBy"),0));
returnpredicate;
}
},pageable);
returnquestion;
}


以上为一个question表为主表,连接grade表和subject表的带条件查找。

首先说几个要点,

1.使用Specification方法进行查找,其参数必须是final类型。

2.编写模糊查询调用like时,参数前后需要自己添加"%"符号。(也许有现成直接调用不需要自己添加的方法,但没找到,知道的请告知)。

3.连接表时有两中方法:

第一种是上面代码写的root.<Grade>get("grade").<Long>get("id"),找到question实体中对应着的grade的实体的id字段。

第二种是直接写root.<Long>get("gradeId"),question表对应的外键字段。

4.Specification,方法默认是分页方法需要传入分页信息。



另外,说几个方法

gradeId

NumberUtils.isNumber(gradeId) 查看参数是否为整数(int)

分享到:
评论

相关推荐

    SpringData案例

    这个案例主要探讨了在SpringBoot项目中使用SpringData进行数据操作,包括增、删、查等基本功能,以及如何处理数据库中的一对一、一对多和多对多关系。现在我们将深入探讨这些知识点。 首先,SpringData的主要目标是...

    用spring-boot来实现的一个外卖系统源码.zip

    5. **数据访问层(Data Access Layer)**:使用Spring Data JPA,可以轻松地与数据库进行交互。可能包括`OrderRepository`、`RestaurantRepository`等接口,用于执行SQL查询。 6. **模型(Models)**:系统中的实体...

    spring data实战源码

    《Spring Data实战源码》是基于Spring Data框架的一本深入解析书籍,其随书源码提供了丰富的示例和实践案例,帮助读者理解Spring Data的核心概念和技术。Spring Data是一个强大的库,旨在简化数据库访问并增强数据...

    Spring Data实战

    Spring Data的核心是Repository抽象,它定义了一组通用的操作,如查找、保存、删除等。开发者只需要继承特定的Repository接口,就可以获得定制化的数据访问功能。 4. **QueryDerivation** Spring Data能自动从...

    SpringBoot 增删改查实例Demo

    1. 添加依赖:在`pom.xml`文件中引入`spring-boot-starter-data-jpa`和`mysql-connector-java`依赖,确保Spring Data JPA和MySQL驱动可用。 2. 配置数据库连接:在`application.properties`或`application.yml`中...

    Spring MVC框架实例

    - 引入 Spring Data JPA 或 MyBatis 进行数据访问。 - 使用 Spring Security 进行权限控制。 - 集成其他中间件,如 Redis 缓存、Quartz 定时任务等。 总结,Spring MVC 为开发者提供了灵活且强大的 Web 开发框架,...

    spring boot

    - **Spring Data JPA**:用于简化基于 JPA 的数据访问层开发。 - **MyBatis**:如果偏好使用 MyBatis,则可以使用 `spring-boot-starter-mybatis` 依赖。 #### 四、Spring Boot 实战案例 - **案例一:在线商城...

    15.-Spring-note.zip_Java编程_Java_

    Spring Data为访问各种数据存储提供了统一的API,包括JPA、JDBC、MongoDB等。它简化了数据库操作,例如通过注解实现查询,减少了大量重复的CRUD代码。 **6. Spring Security** Spring Security是一个强大的安全框架...

    SpringBoot+Thymeleaf实现的兼职招聘网站.zip

    - 使用Spring Data JPA可以方便地操作数据库。通过`@Repository`注解创建仓库接口,Spring会自动提供实现。 - 可能会有一个`JobRepository`接口,用于CRUD操作,如查找、添加、修改和删除兼职职位。 5. **服务层*...

    狂神 springboot 笔记 同b站课程

    3. **起步依赖(Starter POMs)**:Spring Boot通过一系列的起步依赖,帮助开发者快速选择和添加所需的功能模块,如`spring-boot-starter-web`用于Web开发,`spring-boot-starter-data-jpa`用于数据库访问等。...

    Spring基础教程.pdf

    - Spring提供了对各种数据访问技术的支持,包括JDBC、Hibernate、MyBatis等ORM框架,以及Spring Data JPA和Spring Data MongoDB等高级抽象。 - Spring JDBC模板简化了数据库操作,而Spring Data则提供了更简洁的...

    JAVA WEB项目开发案例精粹(源代码)

    案例将涵盖Spring Boot、Spring MVC、Spring Data JPA等模块的使用。 10. **安全与认证** Java Web项目中的安全性至关重要,例如使用HTTPS、Spring Security进行权限控制、OAuth2认证等。案例可能包含如何实现用户...

    [Spring揭秘].王福强.文字版

    9. **Spring Data**:Spring Data项目旨在简化数据访问层的开发,支持多种持久化技术,如JPA、MongoDB等,提供了统一的CRUD操作和查询API。 10. **Spring Cloud**:在分布式系统中,Spring Cloud提供了一系列微服务...

    Spring学习案例

    此外,Spring Data JPA和MyBatis等ORM框架集成,使得对象关系映射更为便捷,大大降低了数据库操作的复杂度。 4. **代码Demo**: 在压缩包中的代码Demo,可能会包含以下几个部分: - `pom.xml`:项目构建文件,...

    SpringBootWeb:一个使用Spring Boot的演示Web(jsp)项目

    使用`spring-boot-starter-data-jpa`依赖,结合`@Entity`、`@Repository`和`@Service`注解,实现数据访问对象(DAO)和事务管理。 8. **安全控制**:如果项目涉及到用户认证和授权,可能会使用Spring Security,这...

    Spring Boot项目开发实战教程.docx

    - **数据访问层实现**:数据访问层负责与数据库交互,教程将详细介绍如何使用Spring Data JPA或MyBatis等技术栈来实现高效的数据访问。 #### 三、配置文件设置 - **YAML与Properties文件**:教程会比较这两种配置...

    Java图书管理系统book-manager.zip

    manager`涵盖了Java开发中的多个重要技术栈,包括但不限于Spring Boot、Spring Data JPA、Hibernate、Thymeleaf、RESTful API、MySQL数据库、JWT安全机制等,是一个全面展示Java后端开发能力的实践案例。开发者可以...

    java笔试题大全

    - Spring Data JPA或MyBatis的使用 - Spring Boot的快速开发特性 7. **其他进阶知识**: - MySQL数据库设计与优化 - 网络协议(TCP/IP, HTTP) - 设计模式(单例、工厂、观察者、装饰器等) - Maven或Gradle...

    JPA-CRUD-Application

    同时,由于涉及到数据库操作,可能会使用Spring Framework,特别是Spring Data JPA来简化JPA的使用。此外,可能还使用了Thymeleaf或JSP作为视图技术,以及Spring Security来处理用户认证和授权。 综上所述,JPA-...

    基于Springboot+Vue的论文管理系统源码案例设计.zip

    Spring Data JPA被用来简化数据库操作,使得开发者可以更专注于业务代码,而不是数据库层面的细节。 Vue.js是一个轻量级的前端JavaScript框架,强调可复用性和组件化开发。在论文管理系统中,Vue.js用于构建用户...

Global site tag (gtag.js) - Google Analytics