Spring JPA 核心概念
时间:2022-07-24
本文章向大家介绍Spring JPA 核心概念,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Spring JPA 核心概念
翻译: Core concepts
Spring数据存储库抽象中的中心接口是repository
。它采用要管理的域类以及域类的ID类型作为类型参数。此接口主要充当标记接口,以捕获要使用的类型,并帮助您发现扩展此接口的接口。CrudRepository
为被管理的实体类提供了复杂的CRUD功能。
例3:CrudRepository
接口
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity); //保存指定的实体
Optional<T> findById(ID primaryKey); //返回给定id的实体
Iterable<T> findAll(); //返回所有实体
long count(); //统计实体个数
void delete(T entity); //删除给定的实体
boolean existsById(ID primaryKey); //判断给定id的实体是否存在
// … more functionality omitted.
}
我们还提供特定于持久性技术的抽象,例如
JpaRepository
或MongoRepository
。这些接口扩展了CrudRepository
,在CrudRepository
的通用接口外,还增加拓展了公开了其他基础持久性技术的接口功能。
在CrudRepository
之上,有一个PagingAndSortingRepository
抽象接口,它添加了其他方法来简化对实体的分页访问:
例4:PagingAndSortingRepository
接口
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
获取页面大小为20的user
实体列表第二页的代码如下所示:
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(PageRequest.of(1, 20));
注:Page从0开始
除了查询方法之外,还可以使用计数和删除查询的查询派生。以下列表显示派生计数查询的接口定义:
例5:计数查询派生
interface UserRepository extends CrudRepository<User, Long> {
long countByLastname(String lastname);
}
以下列表显示了派生的删除查询的接口定义:
例6:删除查询派生
interface UserRepository extends CrudRepository<User, Long> {
long deleteByLastname(String lastname);
List<User> removeByLastname(String lastname);
}
附注:SpringBoot 项目分页查询Demo
Dao
public interface ShipDao extends JpaRepository<ShipPO,Integer> {
Page<ShipPO> findByRegion(String region,Pageable pageable);
}
Service
@RequestMapping(value = "/ship",method = RequestMethod.GET)
public List<ShipPO> GetShip(
@RequestParam(value = "region",required = false,defaultValue = "none") String region
){
Pageable pageable = PageRequest.of(page,5, Sort.by(Sort.Direction.DESC,"sdate"));
//无区域限制
//根据地区查询,有地区限制 无状态限制
shiplist = shipDao.findByRegion(region,pageable).get().collect(Collectors.toList());
return shiplist;
}
- 当Python字符串遇上MySQL
- Spring Boot 2.0正式发布,升还是不升呢?
- Spring Cloud构建微服务架构:分布式服务跟踪(入门)
- Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
- Spring Cloud Gateway真的有那么差吗?
- Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】
- Golang语言社区--【基础知识】循环
- Spring Cloud构建微服务架构:消息驱动的微服务(消费组)【Dalston版】
- Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)【Dalston版】
- Spring Boot中使用LDAP来统一管理用户信息
- 使用Swagger2Markup实现API文档的静态部署(一):AsciiDoc
- 使用Swagger2Markup实现API文档的静态部署(二):Markdown和Confluence
- Dubbo官方的Starter发布1.0.0测试版,与Spring Boot的结合将更加自然
- spring-boot-starter-swagger 1.2.0.RELEASE:新增分组配置功能
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 使用MA Anderson御用软件SpliceSeq对TCGA数据库的RNA-seq找可变剪切
- Tomcat9安装配置、服务配置开机自启动以及启动窗口的中文乱码问题解决
- Java的System.exit()详解
- Hadoop伪分布式搭建(hadoop2.x通用)
- R语言tryCatch使用方法:判断Warning和Error
- leetcode1546题解【前缀和+贪心】
- leetcode560题解【前缀和+哈希】
- 5秒解决:VMware Workstation 与 Hyper-V 不兼容
- Java的访问控制符详解(结合代码演示)
- Python贪吃蛇小游戏_完整源码免费分享
- GitHub修改昵称和用户名(图解详细教程)
- Python飞机大战小游戏_完整源码免费分享
- Linux求助命令
- Linux关机命令及步骤
- Java实现二叉树层次遍历:从上往下打印出二叉树的每个节点,同层节点从左至右打印。