스프링 데이터에 대해
Spring 커뮤니티의 최고 프로젝트는 주로 데이터 (관계형 및 비 관계형) 액세스를 단순화하는 데 사용됩니다. 스프링 데이터를 사용하여 프로그램을 개발하는 경우 데이터 쿼리 문, DAO 클래스 등과 같은 많은 저수준 데이터 액세스 작업을 저장할 수 있습니다. 우리는 일부 추상 인터페이스 만 작성하고 관련 작업을 정의하면됩니다. Spring은 작동 중에 프록시 인스턴스를 생성하여 인터페이스에 정의 된 작업을 구현합니다.
스프링 데이터 하위 프로젝트에 대해
스프링 데이터에는 많은 하위 프로젝트가 있으며, 스프링 데이터 JPA 외에도 다음과 같은 하위 프로젝트도 있습니다.
봄 데이터 커먼즈
스프링 데이터 mongodb
스프링 데이터 redis
스프링 데이터 Solr
봄 데이터 보석
스프링 데이터 휴식
스프링 데이터 neo4j
스프링 데이터 JPA에 대해
스프링 데이터 JPA는 스프링 데이터의 하위 프로젝트입니다. 주로 데이터 액세스 계층의 구현을 단순화하는 데 사용됩니다. 스프링 데이터 JPA를 사용하면 첨가, 삭제, 수정, 페이지 매김, 정렬 등을 쉽게 구현할 수 있습니다.
예를 들어, 스프링 부트 + 스프링 데이터 JPA
1. pom.xml 파일을 추가하십시오
아래 그림과 같이 :
<? xml version = "1.0"encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance" xsi : schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.xsd"> <modeversion> 4.0.0 </modelversion> <groupid> com.example> <artifactid> </artifactid> <버전> 0.0.1-snapShot </version> <packaging> jar </packaging> <name> 스프링-데이터 -jpa- 면제 </name> <descript> 스프링 부츠를위한 데모 프로젝트 </descript> <부모> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> 4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4. <RelativePath/> <!-리포지토리에서 부모를 조회합니다-> </parent> <properties> <proffice.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.oupputing.outputencoding> utf-8 </project.reporting.outputencoding> <java.version>. </properties> <pectionilency> <pectinement> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-data-jpa </artifactid> </dependency> <pelection> <groupid> org.springframework.boot </groupicid> spring-starter-starter-web </의존성> <pectionency> <groupId> org.springframework.boot </groupid> <artifactid> 스프링 부트 스타터-테스트 </artifactid> <scope> </scope> </spectency> <groupId> mysql </groupId> </empectid> mysql-connement- </artifactid> </artifactid> <groupid> org.springframework.boot </groupid> <artifactid> 스프링-부트-스타터-캐시 </artifactid> </fectionement> </fectionements> <flugins> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plug </artifactid> </artifactid> </빌드> </project>
그 중에서도 스프링 부트 스타터 부모는 Spring Boot 응용 프로그램에 필요한 모든 기본 구성을로드합니다.
Spring-Boot-Starter-Data-JPA는 Spring Data JPA에 필요한 모든 종속성을 다운로드합니다.
프로젝트가 웹 응용 프로그램이기 때문에 스프링 부트 스타터 위와를 추가하십시오.
또한 데이터베이스는 MySQL이므로 MySQL-Connector-Java 종속성도 필요합니다.
캐시가 사용되므로 다른 스프링 부트 스타터 캐시 종속성을 추가하십시오.
2. 엔티티 사용자를 쓰십시오
package com.example.domain; import java.io.serializable; import javax.persistence.column; import javax.persistence.entity; import javax.persistence.id; import javax.persistence.namedquery (namequery;@namedquery (name = "user.findbyname", query = 클래스 사용자는 Serializable을 구현합니다. @id 긴 ID; @Column (이름 = "이름") 문자열 이름; @Column (이름 = "주소") 문자열 주소; public long getid () {return id; } public void setId (long id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public String getAddress () {return address; } public void setAddress (문자열 주소) {this.address = 주소; }}할 말이 없습니다. 여기 @NamedQuery 주석에주의하십시오. 이는 저장소 인터페이스에서 정의하는 FindByName 메소드가 기본 쿼리 구현을 사용하지 않고이 사용자 정의 쿼리 문을 사용하여 쿼리를 사용한다는 것을 의미합니다. 여기에 주석이 없으면 기본 구현이 사용됩니다.
3. 저장소 인터페이스를 작성하십시오
여기서 우리는 예제에만 사용되며 실제로는 하나로 병합 될 수있는 두 개의 리포지토리 인터페이스를 작성합니다.
userjparepository
package com.example.repository; import org.springframework.data.jpa.repository.jparepository; import com.example.domain.user; public interface userjparepository jparepository <사용자, long> {}여기서 userjparepository 인터페이스는 jparepository 인터페이스를 구현합니다.
실제로, JParePository는 페이징 및 조종 조상 인터페이스를 구현하고, 페이징 및 조종 조상 인터페이스는 crudrepository 인터페이스를 구현하고, crudrepository 인터페이스는 리포지토리 인터페이스를 구현합니다.
간단한 설명 :
저장소 인터페이스는 식별 인터페이스이며 내부에서 비어 있습니다.
Crudrepository 인터페이스는 추가, 삭제, 수정 및 검색 방법을 정의합니다.
페이징 및 정렬 인터페이스는 페이징 및 분류에 사용됩니다.
jparepository 인터페이스는 위의 모든 인터페이스를 상속하기 때문에, 그것에 의해 선언 된 모든 방법이 있습니다.
또한 findall 메소드를 예로 들어, JParePository 인터페이스는 목록, PagingAndSortingRepository 및 CrudRepository return iterator를 반환합니다.
사용자 repository
package com.example.repository; import java.util.list; import org.springframework.data.jpa.repository.query; import org.sprameframework.data.repository; import org.spramework.data.repository.query.param; import com.user; 저장소 <사용자, long> {list <user> findByameAndAddress (문자열 이름, 문자열 주소); @Query (value = "u.name = : name") list <user> findbyname1 (@param ( "name") 문자열 이름); @Query (value = "select * from #{ #entityName} u where u.name =? 1", NativeQuery = true) list <user> findbyname2 (문자열 이름); List <user> findbyName (문자열 이름);}여기서 사용자 보고서 인터페이스는 주로 일부 쿼리 메소드를 정의합니다.
예를 들어, 여기에서 다른 쿼리 문을 정의하지 않고 직접 실행할 수 있습니다. 스프링 데이터 JPA는 엔티티 클래스의 속성 이름과 메소드 이름을 기반으로 메소드를 자동으로 구현합니다. 추신 : 엔티티 클래스에서 @NamedQuery 주석을 선언하기 때문에 실제로 FindByName 메소드는 @NamedQuery 주석에 의해 주석이 달린 쿼리 문을 쿼리에 사용합니다.
또한 여기에서 findbyname1 메소드는 HQL 문 쿼리를 사용합니다.
FindByName2 메소드는 원래 SQL 문 쿼리를 사용합니다.
4. 서비스 작성
서비스 인터페이스 :
package com.example.service; import java.util.list; import com.example.domain.user; public interface iuserservice {public list <user> findall (); Public Void SaveUser (사용자 북); 공개 사용자 findone (긴 ID); 공개 무효 삭제 (긴 ID); 공개 목록 <user> findbyname (문자열 이름);}인터페이스 구현 클래스 :
package com.example.service.impl; import java.util.list; import org.springframework.bean.beans.annotation.autowired; import org.sprameframework.cache.annotation.cachable; import org.spramework.stereotype.sprringfringfring com.example.domain.user; import com.example.repository.userrepository; import com.example.repository.userjparepository; import com.example.service.iuserService;@service@service@transactionAlpublic class usererviceimpl은 iuserservice {@autow private userepository userjparosoration; @autowired private userrepository userrepository; 공개 목록 <user> findall () {return userjparepository.findall (); } public list <user> findByName (문자열 이름) {list <user> userList1 = userRepository.FindByName1 (이름); List <사용자> userList2 = userRepository.FindByName2 (이름); List <사용자> userList3 = userRepository.FindbyNameAndAddress (이름, "3"); System.out.println ( "userList1 :" + userList1); System.out.println ( "userList2 :" + userList2); System.out.println ( "userList3 :" + userList3); return userrepository.findbyName (이름); } public void saveUser (User Book) {userjparepository.save (book); } @Cachable ( "사용자") public user findone (long id) {System.out.println ( "캐시 된 페이지"); return userjparepository.findone (id); } public void delete (long id) {userjparepository.delete (id); }}이것에 대해 할 말이 없습니다. 저장소 인터페이스 방법을 호출하십시오.
5. 컨트롤러를 쓰십시오
컨트롤러에 대해 할 말이 없습니다. 여기의 컨트롤러는 @RestController 주석을 사용하여 주석이 달성되었으며 URL 경로 이름은 RESTful Style에 따라 명명됩니다.
package com.example.web; import java.util.list; import org.springframework.beans.bean.annotation.autowired; import org.springframework.web.bind.annotation.pathvariable; import org.spramework.web.bind.annotation.requestmapping; import; org.springframework.web.bind.annotation.restcontroller; import com.example.domain.user; import com.example.service.service.service.service.service.service.service.service.service.service.service.service.service. @RequestMapping (value = "/add/{id}/{name}/{wasse}")) public user adduser (@pathvariable int id, @pathvariable string name, @pathvariable string address) {user user = new user (); user.setid (id); user.setName (이름); user.setAddress (주소); uservice.saveuser (사용자); 리턴 사용자; } @requestmapping (value = "/delete/{id}") public void deletebook (@pathvariable int id) {userservice.delete (id); } @requestmapping (value = "/") public list <user> getbooks () {return userervice.findall (); } @RequestMapping (value = "/{id}") public user getUser (@pathvariable int id) {user user = userervice.findone (id); 리턴 사용자; } @requestmapping (value = "/search/name/{name}") 공개 목록 <userbookbyname (@pathvariable string name) {list <user> users = userervice.findbyname (name); 반환 사용자; }}6. DataSource 구성
Application.Properties 파일에 다음 구성을 추가하십시오.
spring.jpa.show-sql = truelogging.level.org.springframework.data = debugspring.jpa.hibernate.ddl-auto = spring.datasource.url = jdbc : mysql : // localhost : 33 06/demospring.datasource.username = rootspring.datasource.password = rootspring.datasource.driver class-name = com.mysql.jdbc.driver
STS IDE를 사용하면 이러한 속성 구성이 자동으로 프롬프트되므로 검색을 저장할 수 있습니다.
Spring.datasource의 구성을 보려면이 클래스를 참조하십시오 : DataSourceProperties.java
7. 시작 클래스를 작성하십시오
비교적 간단합니다. 이 클래스가 속한 패키지 레벨은 다른 클래스의 주석을 스캔 할 수 있도록 다른 클래스보다 크거나 동일해야합니다.
패키지 com.example; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootApplication; import org.springframework.cache.annotation.enablecaching;@springbootapplication@enablecachingpublic classe springlapajpajpalemapporaljpaexamexamexamexamexamexamexamecation. main (string [] args) {springApplication.run (springDatajpaexamplepplication.class, args); }}프로그램을 실행하고 테스트하십시오
기본 메소드를 시작하거나 JAR 패키지에 입력하여 실행하십시오.
브라우저에 다음 URL을 입력하고 테스트하십시오.
http : // localhost : 8080/users/
http : // localhost : 8080/users/add/100/110/111
http : // localhost : 8080/users/delete/100
http : // localhost : 8080/users/2
http : // localhost : 8080/users/search/name/2
프로그램 소스 코드
https://github.com/peterchenhdu/spring-data-jpa-example
참조
http://docs.spring.io/spring-data/jpa/docs/1.11.0.release/reference/html/
http://javabeat.net/spring-data-jpa/
https://spring.io/guides/gs/caching/
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.