ibatis发展到MyBatis,已经越来越像Hibernate,就像有人调侃,nosql技术系发展到最后就是关系型数据库。
嘿嘿。
关于Spring data jpa的简单分页查询可以参考SpringDataJpa的官方文档。
1:实体类和表的关系
(1)表数据结构
create table T_USER ( ID VARCHAR2(50), USERID VARCHAR2(50), USERNAME VARCHAR2(50), PASSWORD VARCHAR2(50) )
(2)实体类
import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; @SuppressWarnings("serial") @Entity @Table(name = "T_USER") @Data public class SimpleUserEntity implements Serializable { @Id @Column( name = "ID", length = 50,unique = true,nullable = false) private String id; @Column( name = "USERID", length = 50,unique = true,nullable = false) private String userId; @Column( name = "USERNAME", length = 50,nullable = false) private String userName; @Column( name = "PASSWORD", length = 50,nullable = false) private String passWord; }
1:new Object(feild1,feild2)的用法
(1)该方式需保证对应实体类的方法,有对应的构造方法。
public SimpleUserEntity(String userId,String userName){ this.userId = userId; this.userName = userName; }
(2)新建Repository接口
import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; public interface SimpleQueryRepository extends PagingAndSortingRepository<SimpleUserEntity, String> { @Query( value = " select new SimpleUserEntity(s.userId,s.userName) from SimpleUserEntity s ", countQuery = " select count(s) from SimpleUserEntity s" ) Page<SimpleUserEntity> userPageData(Pageable page); }
(3)测试用例
import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import com.slfinance.shanlinbao.repository.SimpleQueryRepository; import com.slfinance.shanlinbao.repository.SimpleUserEntity; @ContextConfiguration(locations = { "classpath:/application-jpa.xml"}) @ActiveProfiles("dev") @Slf4j public class SimpleQueryRepositoryTest extends AbstractJUnit4SpringContextTests { @Autowired SimpleQueryRepository simpleQueryRepository; final int pageNum = 0, pageSize = 10; @Test public void testFindPage(){ Order order = new Order(Direction.DESC,"id"); //字段排序O PageRequest pageRequest = new PageRequest(pageNum, pageSize, new Sort(order)); Page<SimpleUserEntity> userPage = simpleQueryRepository.userPageData(pageRequest); } }
(3)返回数据
{ "id": null, "userId": "A004", "userName": "jack4", "passWord": null }
2:new Map(feild1 as otherAlias1,feild2 ad otherAlias2)
有时有些业务需要将查询出的字段更改别名,通过new Map() 方式也是思路之一。
(1)接口SimpleQueryRepository新增如下方法
@Query( value = " select new Map(s.userId as userNo,s.userName as name) from SimpleUserEntity s ", countQuery = " select count(s) from SimpleUserEntity s" ) Page<Map<String,Object>> userPageDataMap(Pageable page);
(2)SimpleQueryRepositoryTest新增方法
@Test public void testFindPageForMap(){ Order order = new Order(Direction.DESC,"id"); //字段排序O PageRequest pageRequest = new PageRequest(pageNum, pageSize, new Sort(order)); Page<Map<String,Object>> userPage = simpleQueryRepository.userPageDataMap(pageRequest); }
(3)返回数据
{ "userNo": "A004", "name": "jack4" }
相关推荐
Spring Data JPA 提供了内置的支持,可以在查询方法中通过 `Pageable` 参数实现分页和排序。 5. **Auditing**:Spring Data JPA 提供了审计功能,可以自动记录实体的创建时间和修改时间。这可以通过 `@CreatedDate`...
1. **实体(Entities)**:在Spring Data JPA中,实体是数据库表的映射。通过在类上添加`@Entity`注解,我们可以声明一个Java类为数据库表的代表。`@Id`注解用于标识主键字段。 2. **Repository**:Repository是...
Spring Data JPA提供了强大的Repository抽象,允许开发者以声明式的方式定义数据操作,如查询方法。只需要在接口上定义方法名,Spring Data JPA就能自动生成对应的SQL语句。例如,`findAll()`会执行SELECT ALL查询,...
使用 `Pageable` 是 Spring Data JPA 中最简单的分页查询方式。可以在 Repository 接口中添加一个返回 `Page` 对象的方法,例如: ```java public interface CameraInfoRepo extends JpaRepository, String>, ...
9. **数据分页与排序**:Spring Data JPA提供了PagingAndSortingRepository接口,支持分页查询和结果排序。 10. **关联关系**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@...
- Spring Data JPA虽然简化了查询编写,但可能导致生成的SQL不够优化,尤其是在处理大数据量或复杂查询时。开发者需要熟悉JPA的内部工作原理,适时使用`@Query`注解自定义SQL,以提升性能。 2. **关联关系的处理**...
在Spring Boot应用中,使用Spring Data JPA进行分页查询是一种高效且简洁的方式。Spring Data JPA是Spring框架的一部分,它提供了对Java Persistence API (JPA) 的简化封装,允许开发者通过面向接口的方式进行数据库...
总的来说,JPA分页查询和条件分页查询为开发者带来了极大的便利,它减少了对SQL的直接操作,提高了代码的可读性和可维护性。通过合理地运用Spring Data JPA的特性,可以构建出高效、灵活的数据库访问层。在设计和...
本教程将详细介绍 Spring Data JPA 的核心概念与使用方法,帮助开发者从基础入门到实现复杂查询的完整过程。 第一章:Spring Data JPA 入门 Spring Data JPA 简化了 JPA(Java Persistence API)的开发,通过约定...
- **强大的查询支持**:除了简单的 CRUD 方法,Spring Data JPA 还支持基于方法名的复杂查询,甚至可以使用 JPA Querydsl 或 Specification 进行更复杂的查询。 - **事务管理**:Spring Data JPA 结合 Spring 的事务...
在实际项目中,你可能需要处理更复杂的查询,如分页、排序、聚合等,Spring Data JPA 都能提供相应的支持。同时,通过自定义查询方法,你可以轻松扩展功能,而无需编写繁琐的 SQL 语句。 **标签解析:** - **源码**...
6. **分页和排序**:Spring Data JPA支持在查询结果中进行分页和排序,可以方便地通过Repository接口实现。 7. **存储过程**:Spring Data JPA也支持调用数据库存储过程,并将其结果转换为Java对象。 8. **JPA实体...
在处理复杂的查询需求时,Spring Data JPA的`Specifications`接口提供了动态构建查询的能力,允许我们在运行时根据业务逻辑创建复杂的查询条件。 ### 单条件查询 在Spring Data JPA中,我们可以使用`...
3. **Pageable 和 Sort**:Spring Data JPA支持分页查询和排序。`Pageable`接口提供了页码和每页大小的设置,`Sort`接口用于定义排序规则。 4. **JPQL 和 Criteria API**:如果需要更复杂的查询,可以使用JPQL...
在本项目"Spring Data JPA入门项目02"中,我们将深入探讨如何使用Spring Data JPA进行查询操作,包括排序和分页。Spring Data JPA是Spring Framework的一个模块,它为Java Persistence API (JPA) 提供了一种更加便捷...
通过定义简单的接口,Spring Data JPA可以自动生成对应的查询,包括CRUD操作以及复杂的聚合查询。 **Spring Boot与Spring Data JPA的结合** 在Spring Boot框架中,Spring Data JPA的集成变得更加简单。Spring Boot...
文档中所涉及的知识点涵盖了从简单的仓库接口定义、查询创建,到复杂的事务管理、锁定机制和审计功能的配置,使得开发者能够利用Spring Data JPA来极大减少数据访问层的代码量,专注于业务逻辑的实现。文档的编写以...
在这个"Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例"中,我们将深入探讨这三个组件如何协同工作,实现高效的数据管理与用户交互。 首先,Spring MVC是Spring框架的一个模块,专门用于构建Web应用...
1. **Repository接口**:这是Spring Data JPA的核心特性之一,通过定义一组通用的CRUD(创建、读取、更新、删除)操作接口,开发者可以快速实现数据访问层。例如,`CrudRepository`接口提供了基本的增删查改方法,而...