1. 소개
(1) MySQL은 오늘날 인터넷 회사에 가장 일반적으로 사용되고 광범위한 데이터베이스 인 관계형 데이터베이스 시스템입니다. 높은 동시 방문을 견딜 수있는 서버 측 데이터베이스입니다.
(2) Spring-Data-JPA는 JPA 사양에 따라 제공된 저장소 계층의 구현입니다. Hibernate, OpenJPA 및 기타 프레임 워크와 같은 다양한 구현 프레임 워크를 사용하여 개발할 수 있습니다. 이로 인해 저장소를 간단하게 만들고 비즈니스 계층과 결합 할 수 있습니다.
이 연구에서는 MySQL + Spring-Data-JPA를 사용하여이를 구축합니다. JPA 구현 방법은 최대 절전 모드를 사용합니다. 데이터베이스 연결 풀은 연결에 DBCP를 사용합니다.
2. 프로젝트 구성
1. MySQL 및 JPA 관련 종속성을 소개합니다.
<!-Spring-JDBC 관련 종속성-> <pectionement> <groupid> org.springframework </groupid> <artifactid> spring-jdbc </artifactid> </fectionency> <!-mysql에 연결하기위한 관련 종속성-> <groupid> mysql> <아티 팩트> mysql-connector-java </artifactid> </fectionement> <!-JPA 관련 종속성은 JPA를 지원하기위한 스프링-데이터 -JPA, 스프링-오르름 및 최대 절전 모드를 포함합니다-> <pectionency> <groupid> org.spramewort.boot </groupid> <artifactid> 스프링 부트 스타터-데이터 -jpa </artifactid> </fectionency>
세 가지 의존성을 도입해야합니다. JDBC는 Spring MySQL에 필요한 종속성입니다. 두 번째는 MySQL의 데이터베이스 드라이버 종속성이고 세 번째는 Spring-Data-JPA 관련 종속성입니다.
여기에는 AOP, JDBC, Spring-Orm, Transaction Transaction-API 및 Hibernate와 같은 종속성이 포함되어 있습니다. 따라서 JPA는 기본적으로 최대 절전 모드를 사용하여 구현합니다.
2. 구성 파일 구성 :
구성 파일의 .yml 형식 파일을 선택하고 DPCP2를 사용하여 연결 풀 매개 변수를 구성합니다.
1) 프로젝트 관련 구성 :
서버 : #Configuration 포트 번호 포트 : 8088Spring : 응용 프로그램 : #configuration 서비스 이름 이름 : CMS-DEPT
다음은 서버 오프닝 구성, 주로 서버 이름 및 포트 구성에 대한 관련 정보는 다음과 같습니다.
2) MySQL 관련 구성
SPRING : #DATA 소스 및 JPA 구성 데이터 소스 : #데이터베이스 관련 구성 URL -SSL 연결은 False URL로 설정되어 있습니다 : JDBC : MySQL : // localHost : 3306/CRM? 특성 요소 = UTF8 & USESSL = FALSE #CONFIGURATION USERNAME : *** #CONFIGURATION APPREDTING : ************
다음은 데이터베이스 관련 구성으로 주로 데이터베이스 URL, 계정 및 비밀번호를 구성하는 일부 데이터베이스 관련 구성입니다. URL 이후의 구성 정보는 MySQL 연결의 인코딩 형식 및 SSL 암호화가 활성화되어 있는지 여부입니다.
3) DBCP 관련 구성
스프링 : 다음은 연결 풀 관련 구성 DBCP2입니다. 연결 풀 크기 초기 크기 : 10 #최소 연결 풀 수 Min-IDLE : 10 #Configure 최대 연결 풀 최대 수의 최대 수정 시간 : 30 #configure time timeout max-millis : 30000 #configure, detect to the detect to retect to retect to retect to retect a time to retect to retect to retect a time to detect a topeed a time to detect to retect. 시간 보드-eviction-runs-millis : 200000 #연결 연결 최소 연결 시간 연결 풀 제거-abandoned-on-intranage : 200000
주로 일부 연결 풀 정보로 구성되며 구성 세부 정보는 위의 주석에 표시됩니다.
4) Spring-Data-JPA는 iHibernata 관련 구성을 기반으로합니다
스프링 : jpa : #configure 데이터베이스 유형 데이터베이스 : mysql #configure sql show-sql을 인쇄할지 여부 : true #hibernate 관련 구성 hibernate : #configure cascade level ddl-auto : 업데이트 : #naming 전략 : org.hibernate.cfg.improvedmamingstraties : Hibernate : Hibernate : Hibernate : Hibernate : org.hibernate.dialect.mysql5dialect
구성은 연결 데이터베이스 유형이며 SQL 및 Hibernate의 캐스케이드를 인쇄할지 여부는 다음과 같습니다.
1) 유효성 검사- 최대 절전 모드가로드되면 데이터베이스 테이블 구조의 생성을 확인하십시오.
2) CREATE-hibernate가로드 될 때마다 재현, 데이터베이스 테이블 구조가 재현되므로 데이터베이스 테이블 데이터가 손실되는 이유입니다.
3) 최대 절전 모드가로드 될 때 생성 된 생성 드로프 및 종료는 테이블 구조를 삭제하는 것입니다.
4) 업데이트 카스케이드 업데이트로드 최대 절전 모드는 데이터베이스 구조를 자동으로 업데이트합니다.
여기서 우리는 계단식 업데이트를 선택하고 원래 테이블에서 반복합니다.
이름 지정 전략에는 두 가지 유형이 있습니다.
1).
2), org.hibernate.cfg.improvednamingstrategy 수정 없음 이름 지정.
3. 관련 클래스 구성 :
구성 클래스는 성공적으로 구성되기 전에 공압 클래스와 함께 수평 디렉토리 또는 서브 디렉토리로 구성되어야합니다. 여기서는 구성을위한 XML 메소드 대신 Java 클래스 구성을 사용합니다.
/*** @Function Description : MySQL 관련 구성* @Author Administrator* /// 다음 줄은로드 우선 순위 문제를 처리하기 위해 주석 인터페이스를 정렬하는 데 사용됩니다. 여기에는 두 개의 열거 변수 @Order (ordered.highest_precedence) // 다음 줄은 다음 줄을 구성 클래스 @configuration // 다음 줄을 나타내는 다음 줄은 트랜잭션 관리를 나타 내기 위해이 클래스를 나타 내기 위해 @enabletransactionManagement (proxytArgetClass = true)를 활성화합니다. // 또한 정의 할 수 있습니다. @componentscan.filter (type = filtertype.annotation, value = service.class)} @enablejparepositories (basepackages = "com.hzt. **. Repository") public class mysqlconfig {@bean persistenceExceptionTranslationPostexceptiontranslationLationLationLationLationLationLationLatslorsor (). PersistenceExceptionTranslationPostProcessor (); }} 1) 클래스의로드 우선 순위를 구성하는 데 사용되는 @Order 주석은 두 개의 열거 변수가 있습니다.
ordered.highest_precedence- integer.min_value- 최우선 순위가 가장 높은 최소 값
ordered.lowest_precedence -integer.max_value -maximum value, 우선 순위가 가장 낮습니다
2) @Configuration 주석, 즉이 클래스가 구성 클래스임을 의미합니다.
3) MySQL ProxyTargetClass의 @EnableTransactionManagement Transaction Management = 클래스의 트랜잭션 관리를 가능하게하는 진정한 수단
4) @enablejparepositories는 트랜잭션을 구성하는 데 사용됩니다. 여기서 경로는 CGNL 표현식으로 표시되며 DepTrepository.class와 같은 특정 클래스로 정의 할 수도 있습니다.
자식 요소 포함 필터는 포함 필터 = { @componentscan.filter (type = filtertype.annotation, value = service.class)와 같은 트랜잭션 인터셉터를 정의 할 수 있습니다.
4. ORM 매핑 Java 클래스 관련 코드 :
1) 데이터베이스 테이블 구조
2) 엔티티 클래스 매핑
@entity // 테이블 @table (name = "tbl_dept")에 대한 이러한 유형의 매핑 엔티티 클래스를 나타냅니다. */ private static final long serialversionuid = 1l; /** 1 차 키 -ID UUID*/@ID //이 노트는 필드가 클래스 @generatedValue (generator = "system -uuid")의 주요 키임을 의미합니다. @genericGenerator (name = "system -uuid", 전략 = "uuid") // name- 해당 열의 이름, 길이 @column의 이름을 지정합니다. /** 숫자, 고유 한*// nullable- null, default to true 고유 - 고유, 거짓 @column (name = "no", nullable = false, 고유 = true) 개인 정수 번호; / ** 부서 이름*/ @Column (이름 = "이름", 고유 = true, nullable = false) 개인 문자열 이름; / ** 부서 관리 기본 키 -ID UUID*/ @Column (이름 = "관리자", 고유 = true, nullable = false) 개인 문자열 관리자; / ** 부서 설명*/ @Column (이름 = "설명") 개인 문자열 설명; / ** 부서 전화*/ @Column (이름 = "전화") 개인 문자열 전화; / ** 부서 전화*/ @Column (이름 = "전화") 개인 문자열 전화; / ** 부서 생성 시간*/ @Column (이름 = "CreateTime") @DateTimeFormat (Pattern = "YYYY-MM-DD HH : MM : SS") 개인 날짜 CreateTime; / ** 부서 수정 시간*/ @Column (이름 = "edittime") @DateTimeFormat (pattern = "yyyy-mm-dd hh : mm : ss") 개인 날짜 편집 시간;}
(1), @entity는 데이터베이스로서 이러한 유형의 매핑의 테이블 구조를 나타냅니다.
(2), @table (name = "tbl_dept")이 주석은 엔티티 클래스와 테이블 매핑 간의 관계를 구성하는 데 사용됩니다. 이름은 매핑 된 테이블 이름을 나타냅니다.
(3) @id 주석은이 클래스가 주요 키임을 의미합니다.
(4) @generatedValue 주석은 기본 키 관련 정보를 구성하는 데 사용되며 생성기 속성은 생성 전략을 구성하는 데 사용됩니다. 다음 열거 값이 있습니다.
1. AUTO- 기본 키는 프로그램에 의해 제어됩니다.
2. ID- 데이터베이스에 의해 자동으로 생성됩니다.
3. ENGERATOR- 기본 키를 생성하는 데 사용되는 생성기를 지정합니다.
4. 시퀀스 - 기본 데이터베이스 시퀀스에 따라 기본 키를 생성합니다.
5. 표 - 특정 데이터베이스 테이블을 사용하여 기본 키를 저장하십시오.
6. System-Uuid는 일치에 시스템 생성 UUID의 사용을 나타냅니다.
(5) 열 관련 정보 구성을위한 @Column 주석 1. 이름 필드는 테이블 구조에 매핑 된 매핑 필드를 지정하는 데 사용됩니다.
2. 길이는이 필드의 길이 제약을 나타내며 생략 할 수 있습니다.
3. 고유 한 속성은이 필드에 고유 한 제약 조건을 활성화하는지 여부를 나타냅니다. 기본값은 거짓이고 고유 한 것은 사실입니다.
4. Nullable 은이 필드가 비어있을 수 있는지, 기본값은 사실입니다. 거짓은 비어있을 수 없다는 것을 의미합니다.
(6) @datetimeformat은 데이터베이스 테이블 시간을 매핑하는 데 사용됩니다.
해당 GET 및 설정 방법은 생략되었습니다.
3) Deptrepository 층 구현
그림과 같이, Respository는 인터페이스 사양이며, 다른 하위 인터페이스 상속이 있습니다. 상위 인터페이스의 모든 기능을 상속하는 것 외에도 각 하위 인터페이스는 다른 구현을위한 추가 방법을 추가합니다. Crudrepository 클래스는 기본 메소드를 정의하고 서브 클래스는 별도로 확장됩니다.
예를 들어, 모든 Crudrepository 방법을 상속하는 것 외에도 페이징 및 조절 형성 클래스도이를 확장하여 페이징 검색을위한 관련 메소드를 추가합니다.
반복 가능한 <t> findall (정렬); page <t> findall (pagable pagable);
JParePository는 페이징 및 분류를 기반으로 확장됩니다.
1. 저장소 레이어 :
@repository는이 클래스가 Spring에 의해 관리되고 있으며 DAO 레이어입니다.
/*** @Function 설명 : 부서 테이블 작동을위한 DAO 계층 인터페이스* @Author Administrator*/ @repository // 저장소 이것은 DAO 계층 구현 공개 인터페이스 DepTrepository 확장 <dept, string> {}입니다.구현 클래스에 따라 호출 할 방법이 다릅니다. 일반적으로 모든 사람은 이름과 의미를 알면서이 방법의 사용법을 알 수 있습니다. 일반 유형에서 첫 번째 매개 변수는 테이블 맵의 엔터티 클래스를 나타내고 두 번째 매개 변수는 기본 키 유형을 나타냅니다.
2. 서비스 계층 구현 :
/*** @Function 설명 : 부서 서비스 운영을위한 구현 클래스* @Author Administrator*/ @ServicePublic 클래스 DeptserviceImpl impless deptservice {/** 로그 처리 클래스*/개인 최종 로거 로그 = loggerfactory.getLogger (getClass ()); @autowired 개인 Deptrepository 저장소; @override public dept querybyid (string id)는 예외 {try {dept result = repository.findone (id); log.info (result.toString ()); 반환 결과; } catch (예외 e) {log.info (e.toString (), e); 새로운 ServiceException을 던지십시오 ( "ID에 따라 쿼리하는 동안 예외가 발생했습니다!"); }}}여기서 Findone은 jparepository에 의해 구현 된 방법입니다.
3. 컨트롤러 계층 구현 :
@restController@requestMapping ( "/api/v1/dept") public class deptController {/** logging class*/private logger log = loggerfactory.getLogger (getClass ()); / ** 내 자신의 서비스*/ @autowired Private Deptservice Service; /*** @function 설명 : id* @return dept*/@getmapping ( "/id/get") 공개 결과 GetById (String id)에 기반한 부서 컨텐츠를 쿼리하는 방법 getByid (string id)는 예외 {verify (new verifyparam ( "Department ID", id)); 새로운 결과를 반환합니다 ( "ID를 통해 성공적으로 얻었습니다!", service.queryByid (id)); }}RestController가 JSON 형식을 반환하는 컨트롤러를 나타내는 경우 @RequestMapping은 클래스 맵의 URL을 정의합니다. 여기서 받아들이는 데이터는 일반 문자열 유형입니다. JSON 유형을 수락 해야하는 경우 수락 할 요청 매개 변수를 구성하려면 @RequestBody String ID가 필요합니다.
4. 테스트 :
Spring-Data-JPA 및 MySQL의 통합 및 구성을 완료하기위한 GET 요청을 시뮬레이션하십시오.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.