Spring Boot에서 Spring-data-jpa를 사용하여 데이터베이스 삭제 및 수정

실제 개발 과정에서 데이터베이스에 대한 조작은'첨삭 수정'에 그치지 않는다.가장 보편적인 단일 테이블 조작에 있어 테이블과 필드가 다른 것을 제외하고 문장은 모두 유사하다. 개발자는 업무 논리를 완성하기 위해 대량의 유사하고 무미건조한 문장을 써야 한다.
이러한 대량의 무미건조한 데이터 조작 문장을 해결하기 위해 우리가 가장 먼저 생각하는 것은 ORM 프레임워크를 사용하는 것이다. 예를 들어 Hibernate이다.Hibernate를 통합한 후에 우리는 자바 실체를 조작하는 방식으로 최종적으로 데이터를 데이터베이스 테이블에 비추었다.
추상적인 각 Java 실체의 기본적인'첨삭 수정'작업을 해결하기 위해 우리는 보통 일반적인 방식으로 하나의 템플릿 Dao를 봉인하여 추상적인 간소화를 진행하지만 이렇게 하는 것은 여전히 편리하지 않다. 우리는 각 실체에 대해 범용 템플릿 Dao의 인터페이스를 계승하고 이 인터페이스의 실현을 작성해야 한다.일부 기초적인 데이터 접근은 이미 좋은 복용을 얻을 수 있지만 코드 구조상 모든 실체에 대한 Dao의 인터페이스와 실현이 있을 것이다.
템플릿 Dao의 실현으로 인해 이러한 구체적인 실체의 Dao층은 이미'얇게'변했다. 일부 구체적인 실체의 Dao 실현은 완전히 템플릿 Dao에 대한 간단한 에이전트일 수 있고 왕왕 이런 실현 유형은 많은 실체에 나타날 수 있다.Spring-data-jpa의 등장은 이미 매우 얇은 데이터 접근층을 단지 인터페이스의 작성 방식으로 바꿀 수 있다.예:

public interface UserRepository extends JpaRepository<User, Long> {
User findByName(String name);
@Query("from User u where u.name=:name")
User findUser(@Param("name") String name);
}
우리는 Jpa Repository에서 계승된 인터페이스를 작성하기만 하면 데이터 접근을 완성할 수 있다. 다음은 구체적인 실례를 통해 Spring-data-jpa가 우리에게 가져다 준 강력한 기능을 체험할 수 있다.
사용 예
Spring-data-jpa는 Hibernate에 의존하기 때문입니다.만약 Hibernate에 대해 어느 정도 알고 있다면, 아래의 내용은 조금도 힘들이지 않고 이해하고 Spring-data-jpa를 사용할 수 있습니다.만약에 Hibernate 초보자라면 아래와 같은 방식으로 입문하고 나중에 Hibernate를 배워서 이 부분의 이해와 사용을 돕는 것을 권장할 수 있습니다.
엔지니어링 구성
pom.xml에 관련 종속성을 추가하고 다음을 추가합니다.

<dependency
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
응용 프로그램에 있습니다.xml에 설정: 데이터베이스 연결 정보(예를 들어 삽입식 데이터베이스를 사용하면 필요하지 않음), 테이블 구조를 자동으로 만드는 설정, 예를 들어 mysql를 사용하는 경우 다음과 같습니다.

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
spring.jpa.properties.hibernate.hbm2ddl.auto는hibernate의 설정 속성으로 그 주요 역할은 데이터베이스 테이블 구조를 자동으로 만들고 업데이트하며 검증하는 것이다.매개변수의 구성은 다음과 같습니다.
create:hibernate를 불러올 때마다 지난번에 생성된 테이블을 삭제하고 모델 클래스에 따라 새 테이블을 생성합니다. 두 번이라도 아무런 변화가 없으면 이렇게 실행합니다. 이것이 데이터베이스 테이블 데이터를 잃어버리는 중요한 원인입니다.
create-drop:hibernate를 불러올 때마다 모델 클래스에 따라 테이블을 생성하지만sessionFactory가 닫히면 테이블이 자동으로 삭제됩니다.
업데이트: 가장 자주 사용하는 속성입니다. hibernate를 처음 불러올 때 모델 클래스에 따라 테이블의 구조를 자동으로 만듭니다.
bernate는 모델 클래스에 따라 테이블 구조를 자동으로 업데이트합니다. 테이블 구조가 바뀌어도 테이블의 줄은 이전의 줄을 삭제하지 않습니다.주의해야 할 것은 서버에 배치된 후 테이블 구조는 바로 구축되지 않고 응용 프로그램이 처음 실행된 후에야 비로소 구축된다는 것이다.
validate:hibernate를 불러올 때마다 데이터베이스 테이블 구조를 검증합니다. 데이터베이스에 있는 테이블과 비교만 하고 새 테이블은 만들지 않지만 새 값을 삽입합니다.
이로써 기본 설정이 완료되었습니다. 스프링에서 통합하여 사용한 적이 있다면, 스프링 부트의 편리함을 느낄 수 있을 것입니다. JPA의 전통적인 설정은persistence입니다.xml 파일에 있지만 여기는 필요 없습니다.물론 프로젝트를 구축할 때 이전에 언급한 최선의 실천 공사 구조에 따라 조직하는 것이 좋다. 이렇게 하면 각종 배치가 프레임워크에 스캔될 수 있도록 한다.
엔티티 만들기
id(주키),name(이름),age(나이) 속성을 포함하는 사용자 실체를 만듭니다. ORM 프레임워크를 통해 데이터베이스 테이블에 비칩니다. hibernate가 설정되어 있기 때문입니다.hbm2ddl.auto, 응용 프로그램이 시작될 때 프레임워크는 자동으로 데이터베이스에 대응하는 테이블을 만듭니다.

@Entity
public class User {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Integer age;
//  
//  getter setter
}
데이터 액세스 인터페이스 만들기
다음 코드는 User 엔티티에 해당하는 Repository 인터페이스를 생성하여 해당 엔티티에 대한 데이터 액세스를 수행합니다.

 public interface UserRepository extends JpaRepository<User, Long> {
User findByName(String name);
User findByNameAndAge(String name, Integer age);
@Query("from User u where u.name=:name")
User findUser(@Param("name") String name);
}
Spring-data-jpa에서는 위와 같은 인터페이스만 작성하면 데이터 접근을 할 수 있습니다.더 이상 우리가 이전에 인터페이스를 작성했을 때처럼 인터페이스 구현 클래스를 직접 작성해야 하지 않기 때문에 우리의 파일 목록을 직접 줄일 수 있다.
다음은 위의 UserRepository에 대한 설명을 드리겠습니다. 이 인터페이스는 JpaRepository에서 계승되었습니다. JpaRepository 인터페이스의 API 문서를 보면 이 인터페이스 자체가 생성(save), 업데이트(save), 삭제(delete), 조회(findAll,findOne) 등 기본적인 조작의 함수를 실현했기 때문에 이러한 기초 조작의 데이터 접근에 대해 개발자가 더 이상 정의할 필요가 없습니다.
우리의 실제 개발에서 Jpa Repository 인터페이스가 정의한 인터페이스는 왕왕 부족하거나 성능이 최적화되지 않기 때문에 우리는 더욱 복잡한 조회나 조작을 실현해야 한다.본고는spring-data-jpa를 통합하는 데 중점을 두었기 때문에 여기서 먼저 벽돌을 던져 옥을 끌어당겨spring-data-jpa에서 우리를 흥분시키는 기능을 간단하게 소개하고 그 다음에 단독으로spring-data-jpa에서 흔히 볼 수 있는 사용을 설명하고자 한다.
위의 예에서는 다음 두 함수를 볼 수 있습니다.

User findByName(String name)
User findByNameAndAge(String name, Integer age)
그것들은 각각name에 따라 User 실체를 조회하고name와age에 따라 User 실체를 조회합니다. 여기에는 어떤 종류의 SQL 문장도 없이 두 가지 조건 조회 방법을 완성한 것을 볼 수 있습니다.이것이 바로 Spring-data-jpa의 큰 특성입니다. 해석 방법명을 통해 조회를 만듭니다.
해석 방법 이름을 통해 검색을 만드는 것 외에도 @Query 주석을 사용하여 검색을 만들 수 있습니다. JPQL 문장을 작성하고 ":name"과 같이 @Param이 지정한 매개 변수를 비추면 됩니다. 예를 들어 세 번째findUser 함수와 같습니다.
Spring-data-jpa의 능력은 본고에서 언급한 것뿐만 아니라 본고는 주로 통합 소개를 위주로 하기 때문에 Spring-data-jpa의 사용은 흔히 볼 수 있는 사용 방식만 소개했다.예를 들어 @Modifying 조작, 페이지 정렬, 원생 SQL 지원과 Spring MVC와의 결합 사용 등 내용은 본고에서 상세하게 전개되지 않습니다. 여기에 먼저 구덩이를 파고 다음에 글을 보충합니다. 만약에 이런 것에 관심이 있으면 제 블로그나 간서에 관심을 가지셔도 됩니다. 마찬가지로 많은 댓글로 의견을 교환하는 것을 환영합니다.
단원 테스트
위의 데이터 접근 인터페이스를 완성한 후에 관례에 따라 대응하는 단원 테스트를 작성하여 작성한 내용이 정확한지 검증한다.여기에는 소개를 많이 하지 않고 주로 데이터 조작과 조회를 통해 조작의 정확성을 반복적으로 검증한다. 

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class ApplicationTests {
@Autowired
private UserRepository userRepository;
@Test
public void test() throws Exception {
//  10 
userRepository.save(new User("AAA", 10));
userRepository.save(new User("BBB", 20));
userRepository.save(new User("CCC", 30));
userRepository.save(new User("DDD", 40));
userRepository.save(new User("EEE", 50));
userRepository.save(new User("FFF", 60));
userRepository.save(new User("GGG", 70));
userRepository.save(new User("HHH", 80));
userRepository.save(new User("III", 90));
userRepository.save(new User("JJJ", 100));
//  findAll,  
Assert.assertEquals(10, userRepository.findAll().size());
//  findByName,  FFF User
Assert.assertEquals(60, userRepository.findByName("FFF").getAge().longValue());
//  findUser,  FFF User
Assert.assertEquals(60, userRepository.findUser("FFF").getAge().longValue());
//  findByNameAndAge,  FFF 60 User
Assert.assertEquals("FFF", userRepository.findByNameAndAge("FFF", 60).getName());
//  AAA User
userRepository.delete(userRepository.findByName("AAA"));
//  findAll,  ,  
Assert.assertEquals(9, userRepository.findAll().size());
}

이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기