【知识库】-简单理解CrudRepository接口中的方法
CrudRepository中的方法(这个接口提供了基本增删改查方法)
- save(entity):添加一条数据
- save(entities):添加多条数据entities为集合
- findOne(id):根据id查询一条数据
- exists(id):判断id是否存在
- findAll():查询全部数据
- delete(id):根据id删除数据
- delete(entity):根据一条数据的信息删除数据
- delete(entities):根据多条数据的信息删除数据
- deleteAll():删除全部信息
一、Repository接口
是什么
1、Repository是一个空接口,即:是一个标记接口,表示任何继承它的接口都是仓库接口类。
2、若我们继承了Repository,则该接口会被Ioc容器表示为一个Repository Bean,放入到IOC容器中,进而可以在该接口中定义满足一定规范的方法。
3、实际上也可以通过@RepositoryDefinition(domainClass = Person.class, idClass = Long.class)来替代继承Repository接口。
子接口
1、CrudRepository:继承Repository,实现一组CURD相关的方法
2、PagingAndSortingRespository:继承CrudRepository,实现了一组分页排序相关的方法
3、JpaRepository:继承PagingAndSortingRespository,实现了一组JPA规范相关的方法
4、自定义的XxxRepository:需要继承JpaRepository,这样该接口就具备了通用的数据访问控制层的能力
5、JpaSpecificationExecutor:不属于Repository体系,实现一组 JPA Criteria 查询相关的方法
二. 注解
1、@Query
1、可以执行自定义的JPQL语句以更灵活的查询
// 查询id最大的那个person @Query("from Person p1 where p1.id = (select max(p2.id) from Person p2)") Person getPersonByMaxId();
2、注解传递参数
1、使用占位符:参数顺序必须和JPQL中的顺序一致
@Query("from Person p where p.name = ?1 and p.gender = ?2")
Person query_getPersonByNameAndGender(String name, String gender);
2、使用命名参数:这种写法可以随便设置参数顺序
@Query("from Person p where p.name = :name and p.age = :age")
Person query_getPersonByNameAndAge(@Param("age") Integer age, @Param("name") String name);
- @Param:org.springframework.data.repository.query.Param;
3、spring data允许在占位符上添加%(适用于模糊查询like:%占位符%)
4、@Query支持原生sql查询
@Query(value = "select count(1) from t_person", nativeQuery = true) Long getTotal();
2、@Modifying:可以使用该注解来实现通过JPQL修改和删除(JPQL不支持添加
@Modifying @Query(value = "update Person p set p.name = ?1, p.age = ?2 where p.id = ?3") void updatePerson(String name, Integer age, Long id);
- 注意:更新和删除操作需要事务支持
- 在@Query中编写JPQL语句,但是必须添加@Modifying进行修饰来告诉JPA这是修改的操作
- 为什么@Query可以执行呢?
- 所有的
Repository
方法都有一个事务,但是却是只读事务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架