【知识库】-简单理解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方法都有一个事务,但是却是只读事务

原文地址:https://www.cnblogs.com/1138720556Gary/p/12205242.html

时间: 2024-10-04 12:48:20

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

List接口中特有方法

import java.util.ArrayList; import java.util.List; /* List接口中特有方法: 添加 add(int index, E element) addAll(int index, Collection<? extends E> c) 获取: get(int index) indexOf(Object o) lastIndexOf(Object o) subList(int fromIndex, int toIndex) 修改: set(int i

Java接口中的方法

接口中可以含有变量和方法.但是,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private.protected.static. final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法. 这些都是大家熟知的,但是

类必须实现接口中的方法,否则其为一抽象类

类必须实现接口中的方法,否则其为一抽象类. 实现中接口和类相同. 接口中可不写public,但在子类中实现接口的过程中public不可省. (如果剩去public则在编译的时候提示出错:对象无法从接口中实现方法.) 注: ① 一个类除继承另外一个类,还可以实现接口: class IAImpl extends java.util.Arrylist implement IA{} 继承类                   实现接口 这样可以实现变相的多继承. ② 一个类只能继承另外一个类,但是它可以

教你在Java接口中定义方法

基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClient,其代码结构如下: import java.time.*; public interface TimeClient { void setTime(int hour, int minute, int second); void setDate(int day, int month, int yea

(1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积。int getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的double型变量x,

package com.hanqi.test; //创建接口 public interface ShapePara { //获取面积的方法 double getArea(); //获取周长的方法 double getCircumference(); } package com.hanqi.test; public class Circle implements ShapePara { //定义圆心 public double radius; //定义圆心的横向坐标 private double

匿名内部类我们只使用一次,实现父类接口中的方法

实现方式:new父类接口,然后用一对花括弧把父类方法的实现括起来,这样可以省去书写一个继承类,因为我们只new一次,以后不再new. 最常用情况: 1.new Thread线程使用,实现run方法 2.new Runnable接口使用,实现run方法 3.new android的OnClickListener,实现OnClick方法

1.(1)编写一个接口ShapePara,要求: 接口中的方法: double getArea():获得图形的面积。double getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的dou

package jiekou1; public interface ShapePara { //定义常量PI final double PI=3.14; //定义抽象方法 //获得图形面积 double getArea(); //获得图形周长 double getCircumference(); } package jiekou1; public class Circle implements ShapePara { //定义成员变量 public double radius; public d

Spring Data JPA的Respository接口中查询方法

接口中的方法都自动的被设置为public,接口中的域被自动设置为public static final

原文地址:https://www.cnblogs.com/confusion/p/9399010.html