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 )
public Page<Question>
questionList( final String
keyword, final String
knowledge, final String
type, final String
itemBankId, final String
gradeId, final String
subjectId,Pageable pageable) {
Page<Question>
question = questionDao.findAll( new Specification<Question>()
{
@Override
public Predicate
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));
}
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 ));
return predicate;
}
},pageable);
return question;
}
|
以上为一个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)
分享到:
相关推荐
这个案例主要探讨了在SpringBoot项目中使用SpringData进行数据操作,包括增、删、查等基本功能,以及如何处理数据库中的一对一、一对多和多对多关系。现在我们将深入探讨这些知识点。 首先,SpringData的主要目标是...
5. **数据访问层(Data Access Layer)**:使用Spring Data JPA,可以轻松地与数据库进行交互。可能包括`OrderRepository`、`RestaurantRepository`等接口,用于执行SQL查询。 6. **模型(Models)**:系统中的实体...
《Spring Data实战源码》是基于Spring Data框架的一本深入解析书籍,其随书源码提供了丰富的示例和实践案例,帮助读者理解Spring Data的核心概念和技术。Spring Data是一个强大的库,旨在简化数据库访问并增强数据...
Spring Data的核心是Repository抽象,它定义了一组通用的操作,如查找、保存、删除等。开发者只需要继承特定的Repository接口,就可以获得定制化的数据访问功能。 4. **QueryDerivation** Spring Data能自动从...
1. 添加依赖:在`pom.xml`文件中引入`spring-boot-starter-data-jpa`和`mysql-connector-java`依赖,确保Spring Data JPA和MySQL驱动可用。 2. 配置数据库连接:在`application.properties`或`application.yml`中...
- 引入 Spring Data JPA 或 MyBatis 进行数据访问。 - 使用 Spring Security 进行权限控制。 - 集成其他中间件,如 Redis 缓存、Quartz 定时任务等。 总结,Spring MVC 为开发者提供了灵活且强大的 Web 开发框架,...
- **Spring Data JPA**:用于简化基于 JPA 的数据访问层开发。 - **MyBatis**:如果偏好使用 MyBatis,则可以使用 `spring-boot-starter-mybatis` 依赖。 #### 四、Spring Boot 实战案例 - **案例一:在线商城...
Spring Data为访问各种数据存储提供了统一的API,包括JPA、JDBC、MongoDB等。它简化了数据库操作,例如通过注解实现查询,减少了大量重复的CRUD代码。 **6. Spring Security** Spring Security是一个强大的安全框架...
- 使用Spring Data JPA可以方便地操作数据库。通过`@Repository`注解创建仓库接口,Spring会自动提供实现。 - 可能会有一个`JobRepository`接口,用于CRUD操作,如查找、添加、修改和删除兼职职位。 5. **服务层*...
3. **起步依赖(Starter POMs)**:Spring Boot通过一系列的起步依赖,帮助开发者快速选择和添加所需的功能模块,如`spring-boot-starter-web`用于Web开发,`spring-boot-starter-data-jpa`用于数据库访问等。...
- Spring提供了对各种数据访问技术的支持,包括JDBC、Hibernate、MyBatis等ORM框架,以及Spring Data JPA和Spring Data MongoDB等高级抽象。 - Spring JDBC模板简化了数据库操作,而Spring Data则提供了更简洁的...
案例将涵盖Spring Boot、Spring MVC、Spring Data JPA等模块的使用。 10. **安全与认证** Java Web项目中的安全性至关重要,例如使用HTTPS、Spring Security进行权限控制、OAuth2认证等。案例可能包含如何实现用户...
9. **Spring Data**:Spring Data项目旨在简化数据访问层的开发,支持多种持久化技术,如JPA、MongoDB等,提供了统一的CRUD操作和查询API。 10. **Spring Cloud**:在分布式系统中,Spring Cloud提供了一系列微服务...
此外,Spring Data JPA和MyBatis等ORM框架集成,使得对象关系映射更为便捷,大大降低了数据库操作的复杂度。 4. **代码Demo**: 在压缩包中的代码Demo,可能会包含以下几个部分: - `pom.xml`:项目构建文件,...
使用`spring-boot-starter-data-jpa`依赖,结合`@Entity`、`@Repository`和`@Service`注解,实现数据访问对象(DAO)和事务管理。 8. **安全控制**:如果项目涉及到用户认证和授权,可能会使用Spring Security,这...
- **数据访问层实现**:数据访问层负责与数据库交互,教程将详细介绍如何使用Spring Data JPA或MyBatis等技术栈来实现高效的数据访问。 #### 三、配置文件设置 - **YAML与Properties文件**:教程会比较这两种配置...
manager`涵盖了Java开发中的多个重要技术栈,包括但不限于Spring Boot、Spring Data JPA、Hibernate、Thymeleaf、RESTful API、MySQL数据库、JWT安全机制等,是一个全面展示Java后端开发能力的实践案例。开发者可以...
- Spring Data JPA或MyBatis的使用 - Spring Boot的快速开发特性 7. **其他进阶知识**: - MySQL数据库设计与优化 - 网络协议(TCP/IP, HTTP) - 设计模式(单例、工厂、观察者、装饰器等) - Maven或Gradle...
同时,由于涉及到数据库操作,可能会使用Spring Framework,特别是Spring Data JPA来简化JPA的使用。此外,可能还使用了Thymeleaf或JSP作为视图技术,以及Spring Security来处理用户认证和授权。 综上所述,JPA-...
Spring Data JPA被用来简化数据库操作,使得开发者可以更专注于业务代码,而不是数据库层面的细节。 Vue.js是一个轻量级的前端JavaScript框架,强调可复用性和组件化开发。在论文管理系统中,Vue.js用于构建用户...