ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【知识库】-简单理解CrudRepository接口中的方法

2020-01-17 12:52:52  阅读:1375  来源: 互联网

标签:name Repository 知识库 接口 Person Query CrudRepository id


 

 

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方法都有一个事务,但是却是只读事务

标签:name,Repository,知识库,接口,Person,Query,CrudRepository,id
来源: https://www.cnblogs.com/1138720556Gary/p/12205242.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有