이 글은 Spring Data JPA의 적용 시나리오를 소개합니다(상세). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
JPA에 대해 간단히 이야기해 보겠습니다
개념: JPA(Java Persistence API)는 Sun에서 공식적으로 제안합니다. Java 지속성 사양. 이는 Java 개발자에게 Java 애플리케이션의 관계형 데이터를 관리할 수 있는 객체/연관 매핑 도구를 제공합니다.
Influence: 그의 등장은 주로 기존 지속성 개발 작업과 통합 ORM 기술을 단순화하기 위한 것입니다. Hibernate, TopLink, JDO 등의 ORM 프레임워크가 독립적으로 운영되고 있는 상황 JPA
1. 개념:
개발자가 최소한의 코드를 사용할 수 있도록 하는 ORM 프레임워크 및 JPA 사양 캡슐화 데이터에 대한 액세스 및 작업을 실현할 수 있습니다. 추가, 삭제, 수정, 쿼리 등의 공통 기능을 제공하고 확장이 쉽습니다! Spring Data JPA를 배우고 사용하면 개발 효율성을 크게 향상시킬 수 있습니다.
2. 이점: spring data jpa를 사용하면 DAO 레이어 작업이 필요 없으며 기본적으로 모든 CRUD를 사용할 수 있습니다.
3. 구현:
Maven 소개:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency># 🎜🎜 # gradle 소개:
compile('org.springframework.boot:spring-boot-starter-data-jpa')
구현: 다음 인터페이스 중 하나를 구현하기 위한 인터페이스 만들기
#🎜 🎜## 🎜🎜# 3.1: Repository개요:
은 이를 상속하는 모든 항목이 웨어하우스 인터페이스 클래스임을 나타내는 식별자일 뿐이며 이는 Spring에서 편리합니다. 자동으로 신분증을 스캔합니다. 이 인터페이스는 가장 기본적인 인터페이스일 뿐이며 어떠한 메소드도 정의하지 않습니다. 모든 Repository 유형을 통합하고 스캔 시 구성요소를 자동으로 인식할 수 있도록 하는 것이 목적입니다.
혜택: 예를 들어 외부 세계에 제공하고 싶지 않은 메서드가 있습니다. 예를 들어 추가 및 수정 메서드만 제공하고 싶습니다. , 그러나 삭제 메소드는 제외됩니다. 다음은 몇 가지 메소드입니다. 이 인터페이스는 수행할 수 없습니다. 현재 이 인터페이스를 상속한 다음 CrudRepository 인터페이스의 해당 메소드를 Repository 인터페이스에 복사할 수 있습니다.
3.2: CrudRepository
개요: Repository의 하위 인터페이스, CRUD 제공 관련 메소드
메인 메소드: 保存
<S extends T> S save(S entity);
批量保存
<S extends T> Iterable<S> save(Iterable<S> entities);
根据id查询一个对象
T findOne(ID id)
判断对象是否存在
boolean exists(ID id)
查询所有的对象
Iterable<T> findAll()
根据id列表查询所有的对象
Iterable<T> findAll(Iterable<ID> ids)
计算对象的总个数
long count()
根据id删除
void delete(ID id)
删除对象
void delete(T entity);
批量删除
void delete(Iterable<? extends T> entities);
删除所有
void deleteAll()
#🎜 🎜## 🎜 🎜# 개요: 페이징 정렬과 관련된 일련의 메서드를 추가하는 CrudRepository의 하위 인터페이스
주요 메서드:
不带分页的排序 Iterable<T> findAll(Sort sort) 带分页的排序 Page<T> findAll(Pageable pageable)# 🎜🎜## 🎜🎜# 3.4: JpaRepository
개요:
PagingAndSortingRepository의 하위 인터페이스, JPA 사양 관련 메소드 세트 추가 # 🎜🎜# 🎜🎜#주 메소드:
查询所有对象,不排序 List<T> findAll() 查询所有对象,并排序 List<T> findAll(Sort sort) 批量保存 <S extends T> List<S> save(Iterable<S> entities); 强制缓存与数据库同步 void flush() 保存并强制同步 T saveAndFlush(T entity) 批量删除 void deleteInBatch(Iterable<T> entities) 删除所有 void deleteAllInBatch();
3.5: JpaSpecificationExecutor
개요 # 🎜🎜 #이 비교는 특히 Repository 시스템에 속하지 않으며 주로 복잡한 쿼리를 만드는 데 사용되는 인터페이스(보조 인터페이스)인 JPA Criteria 쿼리 관련 메서드 집합을 구현합니다.
🎜#이 인터페이스는 매우 특별하며 리포지토리 시스템에 속하지 않으며 Spring 데이터 JPA는 이를 자동으로 스캔하고 식별하지 않으므로 해당 Bean이 Repository를 상속하는 하위 인터페이스를 상속하거나 Repository 인터페이스를 직접 상속하기만 하면 Spring 데이터 JPA가 이를 자동으로 스캔하고 식별하여 통합 관리합니다.
4 . 사용자 정의 방법: #🎜 🎜#전제 조건: 위 인터페이스 중 하나 구현
#🎜 🎜#4.1: @ Query Create query
4.1.1: Usage
@Query 주석 사용은 사용이 매우 간단합니다. , 선언된 메서드에서 사용하세요. 위의 주석을 표시하고 JP QL 쿼리 문
을 제공하세요. 예:@Query("select u from User u where u.name = :name") User findUserByName(@Param("name") String name);4.1.2: 매개변수 #🎜 🎜#
4.1.2.1: 명명된 매개변수
설명: 이 방법을 사용하는 것이 좋습니다. 매개변수의 위치는 무시해도 됩니다. @Query("select u from User u where u.name = :name")
User findUserByName(@Param("name") String name);
# 🎜🎜# 4.1.2.2: 인덱스 매개변수
@Query("select u from User u where u.email = ?1")// 1表示第一个参数User findUserByEmail(String email);4.1 .2.3: SPEL 표현식(여기서는 간단히 작성했습니다. 관심이 있으시면 문서로 이동하여 살펴볼 수 있습니다.) 설명: Spring Data JPA 버전 1.4부터 시작 , 수동으로 정의된 쿼리를 통해 제한된 SpEL 사용을 지원합니다. 템플릿 표현식 @Query
@Query("select u from User u where u.name = :name") User findUserByName(@Param("name") String name);SpEL 기반 쿼리 템플릿에서 지원되는 변수
变量 entityName 用法 select x from #{#entityName} x 描述 插入entityName与给定存储库关联的域类型。该entityName解决如下:如果域类型已设置的name属性@Entity注解那么它将被使用。否则,将使用域类型的简单类名称。 注意 该entityName可以通过自定义@Entity的注释。orm.xmlSpEL表达式不支持自定义。 引用#entityName将会把用户类的潜在的未来重映射转换成一个不同的实体名称(例如通过使用@Entity(name = "MyUser")4.1.3: 분류# 🎜🎜## 🎜🎜#
4.1.3.1:QUERY
예:
으으으으으#🎜 🎜# 참고: # 🎜🎜#
1. @Query를 사용하여 로컬 쿼리를 지정하고, NativeQuery를 true로 설정하면 됩니다. 예:@Query("select u from User u where u.name = :name") User findUserByName(@Param("name") String name);2. 현재 버전의 로컬 쿼리는 페이지 넘김 및 동적 정렬을 지원하지 않습니다
Category(쿼리에서도 여러 쿼리로 구분됨)
1、使用@Query在查询方法中声明查询
@Query("select u from User u where u.emailAddress = ?1") User findByEmailAddress(String emailAddress);
2、使用高级LIKE表达式
@Query("select u from User u where u.firstname like %?1") List<User> findByFirstnameEndsWith(String firstname);
3、使用@Query在查询方法中声明本地计数查询以进行分页
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1", countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1", nativeQuery = true) Page<User> findByLastname(String lastname, Pageable pageable);
4.1.3.1:修改查询
比如:
@Modifying @Query(value="update UserModel o set o.name=:newName where o.name like %:nn")public int findByUuidOrAge(@Param("nn") String name,@Param("newName") String newName)
注意:可以通过使用 @Query 来执行一个更新操作,为此,我们需要在使用 @Query 的同时,* 用 @Modifying 来将该操作标识为修改查询,这样框架最终会生成一个更新的操作,而非查询操作。
4.2:@NamedQueries创建查询
概念:命名查询是 JPA 提供的一种将查询语句从方法体中独立出来,以供多个方法共用的功能
用法:用户只需要按照 JPA 规范在 orm.xml 文件或者在代码中使用 @NamedQuery(或 @NamedNativeQuery)定义好查询语句,唯一要做的就是为该语句命名时,需要满足”DomainClass.methodName()”的 命名规则
比如:
编写接口: public interface FindUserByNamedQueryRepository extends JpaRepository<User, Integer> { User findUserWithName(@Param("name") String name); } 编写类: @Entity @NamedQueries(value={ @NamedQuery(name="User.findUserWithName",query="select u from User u where u.name = :name") }) 以下是实体类 ......
注意:
1、@NamedQuery中的name属性的值要和接口中的方法名称一样。
2、此处如果是多个方法,那么需要使用@NamedQueries,如果只有一个方法,则可以使用@NamedQuery,写法如下:
@NamedQuery(name="User.findUserWithName",query="select u from User u where u.name = :name")
4.3:通过解析方法名创建查询
概念:顾名思义,就是根据方法的名字,就能创建查询
定义规则:
说明:按照Spring data 定义的规则,查询方法以find|read|get开头涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写(参数名大写,条件名首字母大写,并且接口名中参数出现的顺序必须和参数列表中的参数顺序一致)
例如:
//参数名大写,条件名首字母大写,并且接口名中参数出现的顺序必须和参数列表中的参数顺序一致 User findByNameAndEmail(String name, String email); //相当于发送了一条SQL:select u from User u where u.name = :name and u.email = :email List<User> findByNameOrPassword(String name, String password); //相当于发送了一条SQL:select u from User u where u.name = ?1 or u.password = ?2 List<User> findByNameOrPassword(String name, String password); //相当于发送了一条SQL:select u from User u where u.name = ?1 or u.password = ?2 List<User> findByIdBetween(Integer start, Integer end); //相当于发送了一条SQL:select u from User u where u.id between ?1 and ?2 List<User> findByIdLessThan(Integer end); //相当于发送了一条SQL:select u from User u where u.id < ?1 ...
解析:框架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。在创建查询时,我们通过在方法名中使用属性名称来表达,比如 findByIdIn()。框架在解析该方法时,首先剔除 findBy,然后对剩下的属性进行解析
一些条件查询的关键字:
框架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。
并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。在创建查询时,我们通过在方法名中使用属性名称来表达
,比如 findByIdIn()。框架在解析该方法时,首先剔除 findBy,然后对剩下的属性进行解析
And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd)
Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr)
Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min)
LessThan --- 等价于 SQL 中的 "
GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min)
IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull()
IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull()
NotNull --- 与 IsNotNull 等价
Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user)
NotLike --- 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user)
OrderBy ---等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user)
Not --- 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user)
In --- 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection
NotIn --- 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection
위 내용은 Spring Data JPA 적용 시나리오 소개(자세히)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 2025 년에 상위 4 개의 JavaScript 프레임 워크 (React, Angular, Vue, Svelte)를 분석하여 성능, 확장 성 및 향후 전망을 비교합니다. 강력한 공동체와 생태계로 인해 모두 지배적이지만 상대적으로 대중적으로

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

Node.js 20은 V8 엔진 개선, 특히 더 빠른 쓰레기 수집 및 I/O를 통해 성능을 크게 향상시킵니다. 새로운 기능에는 더 나은 webAssembly 지원 및 정제 디버깅 도구, 개발자 생산성 및 응용 속도 향상이 포함됩니다.

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

이 기사는 원격 코드 실행을 허용하는 중요한 결함 인 Snakeyaml의 CVE-2022-1471 취약점을 다룹니다. Snakeyaml 1.33 이상으로 Spring Boot 응용 프로그램을 업그레이드하는 방법에 대해 자세히 설명합니다.

대규모 분석 데이터 세트를위한 오픈 테이블 형식 인 Iceberg는 데이터 호수 성능 및 확장 성을 향상시킵니다. 내부 메타 데이터 관리를 통한 Parquet/Orc의 한계를 해결하여 효율적인 스키마 진화, 시간 여행, 동시 W를 가능하게합니다.

이 기사는 Lambda 표현식, 스트림 API, 메소드 참조 및 선택 사항을 사용하여 기능 프로그래밍을 Java에 통합합니다. 간결함과 불변성을 통한 개선 된 코드 가독성 및 유지 관리 가능성과 같은 이점을 강조합니다.

이 기사는 오이 단계간에 데이터를 공유하는 방법, 시나리오 컨텍스트, 글로벌 변수, 인수 통과 및 데이터 구조를 비교합니다. 간결한 컨텍스트 사용, 설명을 포함하여 유지 관리에 대한 모범 사례를 강조합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Dreamweaver Mac版
시각적 웹 개발 도구
