저는 자바도 대충 익었고, Spring Family Bucket에 익숙하지 않으며, 온라인 튜토리얼과 제 경험을 바탕으로 프로젝트 프레임워크를 구축했습니다.
프로젝트 환경:JDK 버전: 1.8.0_171, mysql 버전: 5.7.17, spring boot: 2.1.1.RELEASE, 개발 도구: 아이디어.
하이버네이트와 JPA
이 글의 웹 프로젝트는 Hibernate를 영구 계층 프레임워크로 사용합니다. Spring Boot에서는 또 다른 개념을 이해해야 합니다: JPA
앞 문장은 모호할 수 있지만, 그렇다고 해서 JPA가 스프링 부트의 개념이라는 의미는 아닙니다. 대신 Java Persistence API이며, 중국어로는 Java Persistence Layer API로 번역됩니다.
JPA는 ORM(또는 O/R 매핑)을 기반으로 한 표준 사양으로, JPA는 표준 규칙만 정의하고 구현은 제공하지 않습니다.
현재 JPA의 주요 구현체는 Hibernate, EclipseLink, OpenJPA 등이 있습니다.
데이터 접근 해석 기술 분야에서 Hibernate가 지배적인 위치를 차지하기 때문에, JPA 표준은 기본적으로 Hibernate가 지배하고 있습니다.
스프링부트는 자동 소총입니다
Spring Data JPA는 개발자가 Hibernate 프레임워크를 적용할 수 있도록 인터페이스 도구로 제공됩니다. 저희 Spring Boot는 완전 자동화된 "자동 의존 모듈"을 제공합니다: spring-boot-starter-data-jpa
POM 의존성 구조:
최대 절전 절전 시 인용이 없는 POM 파일에 대해 궁금한 점 있으신가요?
그 이유는 위 그림에서 보듯이 spring-boot-starter-data-jpa가 hibernate-core에 의존하며, spring-boot-starter-data-jpa를 참조할 때 maven 프로젝트가 자동으로 의존하는 패키지를 도입하기 때문입니다.
application.yml 프로필:
스프링 구성 데이터 소스 공식 링크:하이퍼링크 로그인이 보입니다.
########################################## ###datasource - MySQL 데이터베이스 연결 정보를 지정하세요 ###spring.datasource.url: MySQL 주소 ###spring.datasource.user: 데이터베이스 사용자 이름 ###spring.datasource.password: 데이터베이스 비밀번호 ###spring.datasource.driverClassName: 데이터베이스 드라이버에 대응함 ###spring.datasource.max-active: 연결 풀 내 최대 활성 연결 수를 지정합니다 ###spring.datasource.max-유휴: 연결 풀 내 최대 빈 연결 수를 지정합니다. ###spring.datasource.min-idle: 유지해야 하는 최소 값을 지정합니다 (DBCP 및 Tomcat 연결 풀의 경우) ###spring.datasource.initial-size: 연결 풀이 시작될 때 처음 설정된 연결 수를 지정합니다 ### ###其他信息总结: ###spring.dao.exceptiontranslation.enabled PersistenceExceptionTranslationPostProcessor가 활성화되어 있든 없든, 기본값은 참입니다 ###spring.datasource.abandon-when-percentage-fullsets 타임아웃 시 종료되거나 보고된 포기된 연결 비율을 포함합니다 ###spring.datasource.allow-pool-ssuspend Hikari 풀을 사용할 때, 연결 풀의 일시정지 허용 여부는 false로 설정되어 있습니다 ###spring.datasource.alternate-username-allowed대체 사용자 이름이 허용되는지 여부. ###spring.datasource.auto-commit 업데이트가 자동으로 커밋되는지 여부를 지정합니다. ###spring.datasource.catalog는 기본 카탈로그를 지정합니다. ###spring.datasource.commit-on-return은 연결이 반환될 때 모든 미해결 트랜잭션을 커밋할지 여부를 설정합니다 ###spring.datasource.connection-init-sql은 연결이 생성되어 연결 풀 이전에 실행된 SQL에 추가된다고 지정합니다. ###spring.datasource.connection-init-sqls DBCP 연결 풀을 사용할 때, 초기화 시 실행할 SQL을 지정하세요 ###spring.데이터소스.connection-properties. [키]DBCP 연결 풀을 사용할 때 설정할 속성을 지정합니다 ###spring.datasource.connection-test-query는 연결 실행의 정당성을 검증하는 SQL 문장을 지정합니다 ###spring.datasource.connection-timeout는 연결의 타임아웃 시간을 밀리초 단위로 지정합니다. ###spring.datasource.continue-on-error를 초기화할 때 계속할지 여부에 오류가 발생하면 기본값은 false입니다 ###spring.datasource.data는 Data(DML) 스크립트를 지정합니다 ###spring.datasource.data-source-class-name 데이터 소스의 완전 자격화된 이름을 지정합니다. ###spring.datasource.data-source-jndi는 jndi 주소를 지정합니다 ###spring.데이터소스.데이터-소스-properties. Hikari 연결 풀을 사용할 때는 설정할 속성을 지정합니다 ###spring.datasource.db-properties는 Tomcat 연결 풀을 사용하여 설정할 속성을 지정합니다 ###spring.datasource.default-auto-commit이 자동으로 커밋됩니다. ###spring.datasource.default-catalog는 기본값에 연결하는 카탈로그를 지정합니다. ###spring.datasource.default-read-only? 기본 연결을 읽기 전용으로 설정하세요. ###spring.datasource.default-transaction-isolation은 연결된 트랜잭션의 기본 격리 수준을 지정합니다. ###spring.datasource.driver-class-name은 드라이버의 클래스 이름을 지정하며, 기본적으로 jdbc URL에서 자동으로 감지됩니다. ###spring.datasource.fair-queue FIFO 반환 연결 사용 여부. ###spring.데이터소스.건강 점검-properties. [키] 심장박동 검사 중 히카리 연결 풀을 사용할 때 속성 전달됨 ###spring.datasource.idle-timeout이 사용되지 않는 시간을 지정하며, 기본적으로 유휴 상태로 설정되어 있습니다 ###spring.datasource.ignore-exception-on-pre-load연결 풀이 초기화될 때 예외가 무시되는지 여부. 연결이 생성될 때 실행되는 ###spring.datasource.init-sql ###spring.datasource.initial-size는 연결 풀이 시작될 때 처음 설정된 연결 수를 지정합니다 ###spring.datasource.initialization-fail-fast: 연결 풀을 생성할 때 예외를 던지기 위해 최소 연결 수를 지정할 수 없습니다 ###spring.datasource.initialize데이터 소스를 초기화할지 data.sql로 지정하세요, 기본값: true입니다 ###spring.datasource.isolate-internal-queries는 내부 쿼리를 격리할지 여부를 지정하며, 기본값은 false로 설정됩니다 ###spring.datasource.jdbc-interceptors Tomcat 연결 풀을 사용할 때, jdbc 인터셉터와 세미콜론 구분을 지정하세요 ###spring.datasource.jdbc-url은 JDBC URL을 지정합니다. ###spring.datasource.jmx-enabled는 기본적으로 활성화되어 있습니다: false ###spring.datasource.jndi-namejndi의 이름을 지정합니다. ###spring.datasource.leak-detection-threshold 히카리 연결 풀을 사용할 때 몇 밀리초의 연결 누출을 감지하나요? ###spring.datasource.log-abandoned는 DBCP 연결 풀을 사용하여 버려진 문장이나 연결을 추적하며, 기본값은 false입니다 ###spring.datasource.log-검증-오류스톰캣 연결 풀을 사용할 때, 검증 오류를 출력할지 여부. ###spring.datasource.login-timeout데이터베이스 연결 시 타임아웃 시간을 지정합니다. ###spring.datasource.max 연령은 연결 풀 내 연결의 최대 연령을 지정합니다 ###spring.datasource.max 수명은 연결 풀 내 최대 연결 수명을 밀리초 단위로 지정합니다. ###spring.datasource.max-open-prepared-statements는 열려 있는 최대 준비된 진술의 수를 지정합니다. ###spring.datasource.max-대기는 연결 풀이 연결이 돌아올 때까지 기다리는 최대 대기 시간을 밀리초 단위로 지정합니다. ###spring.datasource.maximum-pool-size는 활성 및 유휴 연결을 포함한 연결 풀 내 최대 연결 수를 지정합니다. ###spring.datasource.min-evictable-idle-time-millis는 해당 연결이 해제되기 전까지 유휴 상태가 될 수 있는 최소 시간 동안 빈 연결을 지정합니다. ###spring.datasource.min-idle은 유지해야 할 최소 값을 지정합니다(DBCP 및 Tomcat 연결 풀의 경우) ###spring.datasource.minimum-idle은 HikariCP를 사용할 때 연결이 유지하는 최소 자유 연결 수를 지정합니다. ###spring.datasource.name 데이터 소스의 이름을 지정하세요. ###spring.datasource.num-tests-per-eviction-run은 각 유휴 객체 이비터 스레드를 실행할 때 객체 수를 지정합니다 ###spring.datasource.password데이터베이스 비밀번호를 지정하세요. ###spring.datasource.platform은 스키마에 사용할 플랫폼 (schema-${platform}.sql을 지정하며, 기본값은 다음과 같습니다: ###spring.datasource.pool-name은 연결 풀의 이름을 지정합니다. ###spring.datasource.pool-prepared-statements는 명문을 풀할지 여부를 지정합니다. ###spring.datasource.propagate-interrupt-state스레드가 연결을 기다리는 동안 중단되면 인터럽트 상태를 전파할지 여부. ###spring.datasource.read-onlyHikari 연결 풀을 사용할 때, 데이터 소스를 읽기 전용으로 표시할지 여부 ###spring.datasource.register-mbeans는 Hikari 연결 풀이 JMX MBean 레지스터를 하는지 여부를 지정합니다. ###spring.datasource.remove-abandoned는 버려진 타임아웃 직후 연결을 삭제할지 여부를 지정합니다. ###spring.datasource.remove-abandoned-timeout연결을 포기해야 할 시간을 지정합니다. ###spring.datasource.rollback-on-return연결 반환 시 대기 중인 트랜잭션을 롤백하는 것. ###spring.datasource.schema는 Schema(DDL) 스크립트를 지정합니다. ###spring.datasource.separator는 스크립트 초기화를 위한 문장 구분자를 지정하며, 기본값은 ; ###spring.datasource.sql-스크립트-인코딩은 SQL 스크립트 인코딩을 지정합니다. ###spring.datasource.suspect-timeout버려진 연결을 출력하기 전에 타임아웃을 지정합니다. ###spring.datasource.test-on-borrow 연결 풀에서 연결을 빌릴 때, 연결을 테스트할지 여부. ###spring.datasource.test-on-connect가 생성되며, 연결을 테스트할지 여부 ###spring.datasource.test-on-return연결이 연결 풀로 반환되는지 여부. ###spring.datasource.test-while-idle연결이 유휴 상태일 때 연결 테스트를 수행할지 여부. ###spring.datasource.time-between-eviction-runs-millis 유휴 연결 검사, 포기된 연결 정리, 유휴 연결 풀 크기 사이의 작업 시간 간격을 지정합니다 ###spring.datasource.transaction-isolation은 Hikari 연결 풀을 사용할 때 지정되는 트랜잭션 격리 수준을 지정합니다 ###spring.datasource.url은 JDBC URL을 지정합니다. ###spring.datasource.use-disposable-connection-façade는 닫힌 후 사용되지 않도록 연결을 감싸 줍니다. ###spring.datasource.use-equal = = 대신 String.equals()를 사용할지 여부. ###spring.datasource.use-lock은 연결 연산에서 잠겨 있습니다 ###spring.datasource.username데이터베이스 이름을 지정하세요. ###spring.datasource.validation-interval은 연결 검사를 수행할 ms 수를 지정합니다. ###spring.datasource.validation-query는 연결을 얻을 때 연결 검증을 위한 SQL 쿼리 문장을 지정합니다. ###spring.datasource.validation-query-timeout는 연결 검증 쿼리의 타임아웃 시간을 지정합니다. ###spring.datasource.validation-timeoutHikari 연결 풀을 사용할 때 지정되는 연결 검증 타임아웃 시간을 설정합니다 ###spring.datasource.validator-class-name 쿼리를 테스트하는 데 사용된 검증기 전체 자식자. ###spring.datasource.xa.data-source-class-name 데이터 소스의 전체 수식자를 지정합니다. ###spring.datasource.xa.properties는 XA 데이터 소스에 전달되는 속성을 지정합니다 ###spring.datasource.url=jdbc:mysql://localhost:3306/test?user=root&password=root&useUnicode=true&characterEncoding=UTF8 ########################################## spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.max-활성=20 spring.datasource.max-아이들=8 spring.datasource.min-idle=8 spring.datasource.initial-size=10 ########################################## ##SPring JPA 구성 정보 ###spring.jpa.database는 대상 데이터베이스를 지정합니다. ###spring.jps.show-sq: SQL 문장 표시 여부 ###spring.jpa.hibernate.ddl-auto는 DDL 모드(none, validate, update, create, create-drop)를 지정합니다. 임베디드 데이터베이스를 사용할 때는 기본값이 create-drop이며, 그렇지 않으면 없음입니다. ###spring.jpa.hibernate.naming-strategy명명 정책을 명시하세요. ###其他: ###spring.jpa.database-platform: 대상 데이터베이스 유형을 지정합니다. ###spring.jpa.generate-ddl 시작 시 스키마를 초기화할지 여부, 기본값은 false로 표시됩니다 ###spring.jpa.hibernate.ddl-auto는 DDL 모드(none, validate, update, create, create-drop)를 지정합니다. 임베디드 데이터베이스를 사용할 때는 기본값이 create-drop이며, 그렇지 않으면 없음입니다. ###spring.jpa.hibernate.naming-strategy명명 정책을 명시하세요. ###spring.jpa.open-in-view가 OpenEntityManagerInViewInterceptor를 등록하고 JPA EntityManager를 요청 스레드에 바인딩합니다. 기본값은 참입니다 ###spring.jpa.properties는 JPA 제공자에 추가 속성을 추가합니다. ###spring.jpa.show-sql SQL 활성화 여부는 기본적으로 false로 설정되어 있습니다 ########################################## spring.jpa.database = MYSQL Spring.jpa.show-SQL = true spring.jpa.hibernate.ddl-auto = 업데이트 spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect spring.freemarker.charset=UTF-8
전체 패키지 구조
데이터 소스 구성:
엔터티 클래스:
데이터베이스 운영 인터페이스:
데이터베이스 운영 인터페이스는 JpaRepository 제네릭 클래스에서 상속받으며, 이를 상속하면 개발자에게 부여하는 신성한 힘을 얻게 됩니다:
이 메서드들을 직접 호출해 데이터베이스 작업을 수행할 수 있으며, 다음과 같은 성격에 맞는 다른 작업을 수행할 수 있도록 HQL을 맞춤화할 수도 있습니다:
이 코드에서 @Query 주석을 통해HQL 집필 완료여기서 ":name"은 아래 @Param 주석의 매개변수와 일치합니다.
참고: HQL의 테이블 이름은 ORM 맵의 클래스 이름이어야 하며, HQL은 전통적인 SQL 문과 몇 가지 차이점이 있습니다. 예를 들어 "*"의 의미가 다릅니다.
HQL 사용에 익숙하지 않다면 SQL 문도 사용할 수 있습니다:
위 방법은 실제로 시행될 때 여전히 효과적입니다.nativeQuery to true는 SQL 언어를 사용하는 것을 의미합니다。
컨트롤러 클래스:
프로젝트 시작
Hibernate는 엔터티 클래스를 자동으로 데이터베이스에 매핑하여 관련 데이터베이스 테이블을 생성하고, @Table, @Column, @Id, @GeneratedValue(전략 = GenerationType.AUTO) 등 주석을 기반으로 데이터베이스 테이블을 자동으로 매칭합니다. 집계 작업을 많이 절약할 수 있습니다.
(프로젝트를 시작하기 전에 먼저 데이터베이스를 구축해야 하며, 그러면 테이블이 자동으로 생성됩니다)
hibernate_sequence 테이블은 주석이 달린 id 생성 전략@GeneratedValue, GenerationType.AUTO는 자동 생성을 나타냅니다. id 속성이 int 또는 long type 속성이어야 한다면, String 타입의 id라면 id 위에 이 주석을 추가하면 즉시 오류가 발생합니다. 따라서 문자열 타입의 ID라면 @GeneratedValue로 주석을 달 필요가 없습니다 (strategy = GenerationType.AUTO).
검사 요청하세요
완전한 데이터 요청과 전송 및 전송 시 데이터 저장을 완료합니다.
호출하이퍼링크 로그인이 보입니다.다음 그림에 나와 같이 데이터 추가를 위한 인터페이스 POST 요청:
데이터베이스 쿼리는 다음과 같습니다:
다음 인터페이스를 통해 데이터를 받아보세요:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
참고: 위 인터페이스에서 요청한 대로, Java는 대소문자 구분에 매우 민감하며, URL 주소든 매개변수든 대소문자 구분이어야 합니다! 대문자나 소문자가 있으면 요청이 인터페이스에 도달하지 못하거나 매개변수가 비어 있습니다!
드루이드는 다음과 같은 상황을 모니터링합니다:
마지막으로 소스 코드를 첨부하세요:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다 회답
(끝)
|