스프링 데이터 JPA 소개 및 DAO 층 (영속 계층) 표준 인터페이스 규칙 또는 사용자 정의 방법

JPA 소개

도입 이전, JPA JPA ORM 사양이 JDK5의 일에 통합, 그것은 객체 ORM 통합 기술, 표준화 및 표준입니다. HibernateEntityManager의 제이 보스를 포함하여 더 성숙 JPA 프레임 워크, 오라클은 지역 사회는 EclipseLink 이클립스, 아파치는 OpenJPA 등을 기증했다. Hibernate는 JPA를 설명하기 위해 다음 예제를 사용합니다.

사용 최대 절전 모드의 EntityManager

절전 스프링 자체의 독립적이며, 스프링기구를 사용하지 않고, 코드 다오 층은 아래의 기준 시간이 필요 도시 persistence.xml프로필

공공 클래스 UserDaoImpl는 구현 UserDao { 공공 AccountInfo의 저장 ( AccountInfo의 AccountInfo의를) { 의 EntityManagerFactory 기전력 = 지속성 .createEntityManagerFactory ( "SimplePU을 "); EntityManager의 엠는 EMF = ) (.createEntityManager 단계; EM .getTransaction () .begin (); 그들 .persist (AccountInfo의); EM .getTransaction () .commit (); EMF ) (.close 단계; AccountInfo의를 반환; }}

봄 + 최대 절전 모드를 사용하여

스프링의 프로젝트에 도입하는 경우, JPA 스프링 가장 중요한 창조와 파괴, 트랜잭션 관리 등의 EntityManager의 봄이다, 구성이 더 유연, 매우 친절 지원이 자동이 아닌 수동으로 새 구현 클래스를 주입하는 데 사용할 수 있습니다 제공 코드의 통합 관리가 추출된다. 트랜잭션 관리 및 EntityManager를 생성, 모든 코드 개발자가 더 이상 걱정 할 필요가 없습니다 파괴한다.

지속성 코드 :

@Repository ( "userDao ") 공공 클래스 UserDaoImpl는 구현 UserDao { @PersistenceContext 개인 의 EntityManager 그들을; @Transactional 공공 저장 ( AccountInfo의 AccountInfo의) {그들을 .persist (AccountInfo의); AccountInfo의 복귀 ) (.getAccountId 단계; }}

프로필 :

<? XML의 버전 = "1.0 " 인코딩 = "UTF-8 ?"> < 콩 ...> < 컨텍스트 : 성분 주사 기본 패키지 = "footmark.springdata.jpa "/> < TX : 주석 기반 트랜잭션 관리자 = "의 transactionManager "/> < ID = "의 transactionManager " 클래스 = "org.springframework.orm.jpa.JpaTransactionManager "> < 속성 이름 = "의 EntityManagerFactory " REF = "의 EntityManagerFactory "/>"의 EntityManagerFactory " 클래스 = "org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean "> </ 빈> </ 콩>

테스트 코드 :

공용 클래스 SimpleSpringJpaDemo { 
	 공공 정적 무효 메인 ( 문자열 [] 에 args) { ClassPathXmlApplicationContext의 CTX = 새로운 ClassPathXmlApplicationContext ( "스프링 데모 cfg.xml을 "); UserDao userDao = CTX .getBean ( "userDao " UserDao에서 의 .class); userDao .createNewAccount ( "ZhangJianPing ", "123456 ", 1); }}

스프링 데이터 JPA를 사용하여

정상에서 당신은 개발자 만 작성, 트랜잭션 처리의 JPA의 EntityManager 과정에 관한 너무 많은 걱정없이, 핵심 비즈니스 로직 구현 코드에 대해 우려 할 필요가 스프링 JPA 지원은 매우 강한되었습니다 볼 수 있습니다. 하지만 당신은 DAO를 영속 계층 구현 로직 또는 수동으로 쓰고 있습니다. 이에 야기한 Spring Data JPA스프링 데이터 JPA 영속 계층 자동 상속에 의해 제공된 원하는 논리 규격 또는 표준 인터페이스를 달성하기위한 방법에 이름에 따라 생성 될 수 Repository, PagingAndSortingRepository, CrudRepositoryJpaRepository다른 다양한 방법이 실질적으로 자동으로 획득 또는 주석에 의해 침전물 @Query맞춤 일부 복잡한 구현.

특히 스프링 데이터 JPA 최대 절전 모드에 따라 다릅니다.

백그라운드에서 스프링 데이터 JPA는 기능 층을 지속 달성하기 위해 세 가지 방법이 있습니다, 프록시 개체를 만들 수있는 영속 계층 인터페이스입니다 :

  1. 표준 인터페이스를 상속하여 기본 CRUD 메소드에 액세스
  2. 사용자 정의 형식의 방법은 지정된 이름을 준수 스프링 데이터 JPA는 자동으로 그 기능에 따라 이름.
  3. 문 위의 방법을 사용하여 @Query프록시 객체를 생성 할 때 인수, 스프링 데이터 JPA 등을, 다음 쿼리는 그 기능의 주석을 수행하기 위해 제공하고, 쿼리를 제공합니다. 또는 증가 @Modifying쿼리를 수정하는 주석하는 쿼리 (업데이트 작업) 식별

표준 또는 사용자 정의 인터페이스는 메서드를 상속

를 들어 Repository, PagingAndSortingRepository, CrudRepositoryJpaRepository지속성 층에 의해 개발 된 다른 인터페이스 시간을 선택하는 방법을해야한다, 직접 후계자 CrudRepository또는 PagingAndSortingRepository이러한 인터페이스는 물론 자동으로 많이 달성하는 것은 매우 쉽지만,이 문제를 제시, 당신이 비즈니스에 노출하고 싶지 않아 노출 될 수 있습니다 방법 층. 예를 들어, 특정 인터페이스를 삭제하는 방법을 제공하는 것이 바람직하지 않고 운영 향상을 제공합니다. 이 상황의 관점에서, 개발자들은 저장소 인터페이스로 돌아갈 수 있습니다, 그리고 물론,하지 때문에 특히 일반 간단한 시스템 (ERP)의 방법에 대해, 사용자 정의 할 수 있습니다 CrudRepository에 메소드 선언을 인터페이스를 유지하려는 복사 얼마나 쉽게 온다.

다음과 같이 스프링 데이터 JPA는 사용자 정의 쿼리에 대한 몇 가지 키워드 쿼리 식의 조건을 제공한다 :

  • 그리고 --- 같은 findByUsernameAndPassword (문자열 사용자 Striang의 PWD)과 SQL 및 키워드에 해당;
  • 또는 --- 상응하는 등 findByUsernameOrAddress (문자열 사용자 문자열 요지)와 같은 SQL에서 또는 키워드;
  • BETWEEN --- SQL 키워드 간의 등가 같은 findBySalaryBetween (INT 최대, 최소 INT);
  • 작음 ---의 SQL에 해당 "<", 등 findBySalaryLessThan (INT 최대);
  • [초과 --- SQL의 당량은 ">"등 findBySalaryGreaterThan INT (분);
  • ISNULL ---는 SQL에 상응하는 "널"등 findByUsernameIsNull ();
  • 의 IsNotNull --- SQL 상당) (예 : findByUsernameIsNotNull, "null가 아닌";
  • NOTNULL --- 및 IsNotNull에 해당;
  • 마찬가지로 ---의 SQL에 해당 "과 같은"등 findByUsernameLike (문자열 사용자);
  • NOTLIKE ---의 SQL 동등한 같은 findByUsernameNotLike (문자열 사용자)로, "싫어";
  • 있는 OrderBy --- 같은 findByUsernameOrderBySalaryAsc (문자열 사용자)와 같은 "에 의해 순서"의 SQL에 해당하는;
  • 아니 --- 같은 findByUsernameNot (문자열 사용자) "=!"로 SQL, 동등;
  • ---은 "IN"등 findByUsernameIn (컬렉션 userList 여기서)에 SQL에서 등가 파라미터 유형 컬렉션 방법 일 수도 있고, 가변 길이 배열 변수 일 수있다;
  • Notin --- "NOT IN"의 SQL 당량 같은 findByUsernameNotIn (컬렉션 여기서 userList) 파라미터 타입 수집 방법이있을 수 있고, 또는 어레이 가변 길이 매개 변수 일 수있다;

@query를 사용하여 쿼리를 작성

매우 간단한 사용 @query 노트는 단순히 JP QL 쿼리를 제공하면서 수, 메소드 선언 위의 코멘트를 표시

공중 인터페이스 UserDao가 연장 저장소 < AccountInfo의, 긴> { @query를 ( "AccountInfo의 (A)로부터 선택 a 여기서 a.accountId = 1? ") AccountInfo의 findByAccountId ( 계정 아이디); @query는 ( "AccountInfo의 (A)로부터 선택 a 여기서 a.balance> 1? ") 페이지 < AccountInfo의> findByBalanceGreaterThan ( 정수 나머지 페이징 가능한 페이징); }

또한이를 위해, @query를 사용하여 업데이트 작업을 수행 할 수있는 개발자는, 우리는 쿼리를 수정하는 작업을 식별 할 수 @Modifying와 @query를 사용할 필요가

@Modifying 
 @query ( "? 업데이트 세트 AccountInfo의 a.salary = 1 a.salary <2? ") INT increaseSalary ( INT 후, INT 전에);

약간 특별한 문구를 삭제 :

@Transactional
 INT deleteByCountrycode ( @Param ( "COUNTRYCODE ") 문자열 COUNTRYCODE);

springboot 통합Spring Data JPA

공식 스프링 데이터 JPA 스타터의 통합 springboot  spring-boot-starter-data-jpa통합에 의존 Hibernate, Spring Data JPA뿐만 아니라 Spring ORMs(스프링 프레임 워크의 핵심 ORM 지원 ). 사용이 매우 간단합니다.

첫째, 종속성을 추가

< 의존성 
    <의 groupId> org.springframework.boot </ 의 groupId> 
    < artifactId를> 스프링 부팅 스타터 데이터 JPA </ artifactId를>  </ 의존성>

두 구성을있는 application.properties

spring.datasource.url = JDBC한다 : mysql : // localhost를 : 3306 / 테스트
 spring.datasource.username = 루트
 spring.datasource.password = 루트
 spring.datasource.driver 클래스 이름 = com.mysql.jdbc.Driver의 봄. jpa.properties.hibernate.hbm2ddl.auto = 생성 드롭

셋째, 생성 엔티티

@Entity
 공용 클래스 사용자 { @Id @GeneratedValue 개인 롱 아이디; @Column ( null 허용 = false)를 개인 문자열 이름; @Column ( null 허용 = false)를 개인 정수의 시대; //省略构造函数//省略게터의和세터}

넷째, 데이터 액세스 인터페이스를 만들

공용 인터페이스 UserRepository는 확장 JpaRepository < 사용자, 롱> { 사용자 경우 FindByName ( 문자열 이름); 사용자 findByNameAndAge ( 문자열 이름, 정수 세); @query ( "사용자로부터 U 곳 u.name = 이름 ") 사용자 findUser ( @Param ( "이름 ") 문자열 이름); }

GitHub의는 H2 메모리 데이터베이스를 사용하여 데모를 참고, 참조 할 수 있습니다 특정 데모 프로젝트 구현이있다.

거래를위한 스프링 데이터 JPA 지원

기본적으로 방법 스프링 데이터 JPA 구현은 트랜잭션을 사용하고 있습니다. (읽기 전용 = TRUE) @Transactional 동등 질의 형식에 대한 방법, CRUD 형태에있어서, @Transactional 동일하다. 알 수있는 바와 같이, 쿼리의 방법 이외에 거래를 읽기 전용으로 설정되어, 다른 트랜잭션 속성은 기본값입니다.

물론, 외부 트랜잭션 주석 영속 계층을 사용하는 것 외에도, 개발자들은 트랜잭션이 비즈니스 계층 방법은 지속성 방법을 여러 번의 경우 요구 주로 비즈니스 계층 방법에 속성을 지정 @Transactional 사용할 수 있습니다. 트랜잭션은 지속성 층은 비즈니스 거래 또는 비즈니스 업무 설정된 트랜잭션의 전파에 따라 층을 추가 보류 층인 결정될 것이다.

 

Baidu 검색을 사용하는 경우, 그것은 한 번 재현 단지 구글 검색을보고, 발견에는 관련 기사가 없습니다.

이 문서는에 재현 https://github.com/jiwenxing/spring-boot-demo/wiki/Spring-Data-JPA

추천

출처www.cnblogs.com/timeout/p/11084382.html