SpringBoot 는 SQL 데이터 베 이 스 를 어떻게 사용 합 니까?
12171 단어 SpringBootSQL데이터 뱅 크
자바 의 자바 x.sql.dataSource 인 터 페 이 스 는 데이터베이스 연결 을 처리 하 는 표준 방법 을 제공 합 니 다.
1.1.내장 형 데이터베이스 지원
메모리 에 있 는 내장 형 데이터 베 이 스 를 사용 하여 응용 프로그램 을 개발 하 는 것 은 일반적으로 매우 편리 하 다.분명히 메모리 데이터 베 이 스 는 영구적 인 저장 소 를 제공 하지 않 는 다.프로그램 이 시 작 될 때 데이터 베 이 스 를 채 우 고 프로그램 이 끝 날 때 데 이 터 를 버 릴 준 비 를 해 야 합 니 다.
Spring Boot 는 내장 형 H2,HSQL,Derby 데이터 베 이 스 를 자동 으로 설정 할 수 있 습 니 다.연결 URL 을 제공 할 필요 가 없습니다.사용 할 삽입 식 데이터베이스 구축 의존 항목 만 포함 하 십시오.클래스 경로 에 여러 개의 끼 워 넣 은 데이터베이스 가 있 으 면 spring.datasource.embedded-database-connection 설정 속성 을 설정 하여 사용 하 는 것 을 제어 합 니 다.이 속성 을 none 으로 설정 하여 끼 워 넣 은 데이터베이스 의 자동 설정 을 사용 하지 않 습 니 다.
테스트 에서 이 기능 을 사용 하면 프로그램 컨 텍스트 를 아무리 사용 하 더 라 도 전체 테스트 세트 가 같은 데이터 베 이 스 를 다시 사용 한 다 는 것 을 알 수 있 습 니 다.모든 컨 텍스트 에 별도의 내장 형 데이터 베 이 스 를 확보 하려 면 spring.datasource.generate-unique-name 을 true 로 설정 해 야 합 니 다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
1.2.생산 데이터베이스 에 연결DataSource 탱크 를 사용 하여 생산 데이터베이스 연결 을 자동 으로 설정 합 니 다.
1.3.데이터 원본 설정
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
최소한 spring.datasource.url 속성 을 설정 하여 URL 을 지정 해 야 합 니 다.그렇지 않 으 면 Spring Boot 는 내장 형 데이터 베 이 스 를 자동 으로 설정 하려 고 시도 합 니 다.Spring Boot 는 URL 에서 대부분의 데이터베이스 의 JDBC 드라이버 클래스 를 추정 할 수 있 습 니 다.특정 클래스 를 지정 하려 면 이 spring.datasource.driver-class-name 속성 을 사용 할 수 있 습 니 다.
# Tomcat
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
1.4.지원 하 는 연결 풀1.우 리 는 성능 과 동시성 때문에 HikariCP 를 더 좋아한다.만약 HikariCP 가 사용 가능 하 다 면,우 리 는 항상 그것 을 선택 합 니 다.
2.그렇지 않 으 면 Tomcat DataSource 풀 을 사용 할 수 있 습 니 다.
3.그렇지 않 으 면 Commons DBCP 2 가 사용 가능 하 다 면 사용 합 니 다.
4.HikariCP,Tomcat,DBCP 2 를 사용 할 수 없고 Oracle UCP 를 사용 할 수 있다 면 사용 하 겠 습 니 다.
Spring Boot 프로그램 을 응용 프로그램 서버 에 배치 하면 응용 프로그램 서버 의 내 장 된 기능 설정 과 데이터 원본 관 리 를 사용 하고 JNDI 로 접근 하 기 를 원할 수도 있 습 니 다.
spring.datasource.jndi-name=java:jboss/datasources/customers
2.JdbcTemplate 사용
Spring JdbcTemplate 와 NamedParameterJdbcTemplate 클래스 는 자동 으로 설 정 됩 니 다.@Autowire 를 통 해 직접 참조 할 수 있 습 니 다.
@Component
public class MyBean {
private final JdbcTemplate jdbcTemplate;
public MyBean(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void doSomething() {
this.jdbcTemplate ...
}
}
spring.jdbc.template.max-rows=500
3.JPA 와 Spring Data JPAJava Persistence API 는 표준 기술 로 대상 을 관계 데이터베이스 에 매 핑 할 수 있 습 니 다.이 spring-boot-starter-data-jpa POM 은 빠 른 방법 을 제공 합 니 다.이것 은 다음 과 같은 관건 적 인 의존 항목 을 제공 합 니 다.
@Entity
public class City implements Serializable {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String state;
// ... additional members, often include @OneToMany mappings
protected City() {
// no-args constructor required by JPA spec
// this one is protected since it shouldn't be used directly
}
public City(String name, String state) {
this.name = name;
this.state = state;
}
public String getName() {
return this.name;
}
public String getState() {
return this.state;
}
// ... etc
}
3.2.Spring Data JPA 저장 소Spring Data JPA 저장 소 는 데이터 에 접근 할 수 있 는 인터페이스 입 니 다.JPA 조 회 는 방법 이름 에 따라 자동 으로 생 성 됩 니 다.
public interface CityRepository extends Repository<City, Long> {
Page<City> findAll(Pageable pageable);
City findByNameAndStateAllIgnoringCase(String name, String state);
}
Spring Data JPA 저장 소 는 세 가지 서로 다른 안내 모드 를 지원 합 니 다:default,deferred,and lazy.지연 또는 지연 안 내 를 사용 하려 면 spring.data.jpa.reposcories.boottstrap-mode 속성 을 각각 deferred 또는 lazy 로 설정 하 십시오.
3.3.JPA 데이터 베 이 스 를 만 들 고 삭제 합 니 다.
기본적으로 내장 형 데이터베이스(H2,HSQL 또는 Derby)를 사용 할 때 만 자동 으로 JPA 데이터 베 이 스 를 만 듭 니 다.spring.jpa.*속성 표시 설정 JPA 설정 을 사용 할 수 있 습 니 다.
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate[globally_quoted_identifiers]=true
3.4.보기 에서 EntityManager 열기
웹 프로그램 을 실행 하고 있다 면,Spring Boot 는 기본적으로 OpenEntityManager InViewInterceptor 를 등록 하여"보기 에서 EntityManager 열기"모드 를 사용 하여 웹 보기에 서 불 러 오 는 것 을 지연 시 킬 수 있 습 니 다.이런 행동 을 원 하지 않 는 다 면 spring.jpa.open-in-view=false 를 설정 해 야 합 니 다.
4.Spring Data JDBC
Spring Data 는 JDBC 에 대한 저장 소 지원 을 포함 하 며,자동 으로 CrudRepository.더 높 은 조회 에 대해@Query 에 설명 을 제공 합 니 다.
필요 한 의존 관계 가 클래스 경로 에 있 을 때 Spring Boot 는 Spring Data 의 JDBC 저장 소 를 자동 으로 설정 합 니 다.프로젝트 에 추가 할 수 있 으 며,spring-boot-starter-data-jdbc 에 만 의존 합 니 다.
5.H2 웹 콘 솔 사용
H2 데이터 베 이 스 는 브 라 우 저 기반 콘 솔 을 제공 하여 자동 으로 설정 합 니 다.다음 조건 이 충족 되면 콘 솔 은 자동 으로 설 정 됩 니 다.
4.567917.servlet 기반 웹 프로그램 을 개발 하고 있 습 니 다
H2 콘 솔 은 개발 기간 에 만 사용 되 므 로 spring.h2.console.enabled 가 생산 에서 true 로 설정 되 지 않도록 주의해 야 합 니 다.
기본적으로 콘 솔 은/h2-console 에 있 습 니 다.이 spring.h2.console.path 속성 을 사용 하여 콘 솔 의 경 로 를 사용자 정의 할 수 있 습 니 다.
jOOQ 사용
jOOQ 대상 조회(jOOQ)는 Data Geekery 의 유행 제품 입 니 다.데이터베이스 에서 자바 코드 를 생 성하 고 원활 한 API 를 통 해 안전 한 SQL 조 회 를 구축 할 수 있 습 니 다.상업 판 과 오픈 소스 판 은 모두 Spring Boot 와 함께 사용 할 수 있 습 니 다.
6.1.코드 생 성
jOOQ 형식 보안 조 회 를 사용 하기 위해 서 는 데이터베이스 모드 에서 자바 류 를 생 성 해 야 합 니 다.jOOQ 사용자 매 뉴 얼 의 설명 에 따라 조작 할 수 있 습 니 다.jooq-codegen-maven 플러그 인 을 사용 하고 spring-boot-starter-parent"부모 POM"을 사용 하면 플러그 인의
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<executions>
...
</executions>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
</dependency>
</dependencies>
<configuration>
<jdbc>
<driver>org.h2.Driver</driver>
<url>jdbc:h2:~/yourdatabase</url>
</jdbc>
<generator>
...
</generator>
</configuration>
</plugin>
6.2.DSLContext 사용jOOQ 가 제공 하 는 flent API 는 org.joq.DSlContext 인 터 페 이 스 를 통 해 시 작 됩 니 다.Spring Boot 는 DSLContext 를 Spring Bean 으로 자동 으로 설정 하고 응용 프로그램 DataSource 에 연결 합 니 다.DSLContext 를 사용 하려 면 주입 할 수 있 습 니 다.
@Component
public class MyBean {
private final DSLContext create;
public MyBean(DSLContext dslContext) {
this.create = dslContext;
}
public List<GregorianCalendar> authorsBornAfter1980() {
return this.create.selectFrom(AUTHOR)
.where(AUTHOR.DATE_OF_BIRTH.greaterThan(new GregorianCalendar(1980, 0, 1)))
.fetch(AUTHOR.DATE_OF_BIRTH);
}
}
6.3.jOOQ SQL 방언spring.joq.sql-dialect 가 이 속성 을 설정 하지 않 는 한 Spring Boot 는 데이터 원본 에 사용 할 SQL 사투 리 를 확인 합 니 다.Spring Boot 에서 사투 리 를 감지 하지 못 하면 DEFAULT 를 사용 합 니 다.
Spring Boot 는 jOOQ 오픈 소스 버 전이 지원 하 는 방언 만 자동 으로 설정 할 수 있 습 니 다.
6.4.사용자 정의 jOOQ
더 높 은 사용자 정 의 는 Default Configuration Customizer bean 을 정의 하여 이 루어 집 니 다.이 bean 은 org.joq.configuration 을 만 들 것 입 니 다.이것 은 응용 프로그램의 모든 내용 을 자동 으로 설정 하 는 것 보다 낫다.
7.R2DBC 사용
Reactive Relational Database Connectivity(R2DBC)프로젝트 는 관계 데이터베이스 에 반응 식 프로 그래 밍 API 를 가 져 왔 다.R2DBC io.r2dbc.spi.connection 은 비 차단 데이터베이스 연결 을 사용 하 는 표준 방법 을 제공 합 니 다.연결 은 Connection Factory 를 통 해 제 공 된 DataSource 로 jdbc 와 유사 합 니 다.Connection Factory 설정 은 spring.r2dbc.*입 니 다.
spring.r2dbc.url=r2dbc:postgresql://localhost/test
spring.r2dbc.username=dbuser
spring.r2dbc.password=dbpass
Spring Boot 는 R2DBC 의 연결 공장 에서 드라이버 를 가 져 오기 때문에 드라이버 클래스 이름 을 지정 할 필요 가 없습니다.
@Configuration(proxyBeanMethods = false)
public class MyR2dbcConfiguration {
@Bean
public ConnectionFactoryOptionsBuilderCustomizer connectionFactoryPortCustomizer() {
return (builder) -> builder.option(ConnectionFactoryOptions.PORT, 5432);
}
}
@Configuration(proxyBeanMethods = false)
public class MyPostgresR2dbcConfiguration {
@Bean
public ConnectionFactoryOptionsBuilderCustomizer postgresCustomizer() {
Map<String, String> options = new HashMap<>();
options.put("lock_timeout", "30s");
options.put("statement_timeout", "60s");
return (builder) -> builder.option(PostgresqlConnectionFactoryProvider.OPTIONS, options);
}
7.1.내장 형 데이터베이스 지원JDBC 지원 과 유사 하 게 Spring Boot 는 응답 식 으로 사용 할 수 있 도록 내장 형 데이터 베 이 스 를 자동 으로 설정 할 수 있 습 니 다.연결 URL 을 제공 할 필요 가 없습니다.사용 할 삽입 식 데이터베이스 구축 의존 항목 만 포함 하 십시오.
<dependency>
<groupId>io.r2dbc</groupId>
<artifactId>r2dbc-h2</artifactId>
<scope>runtime</scope>
</dependency>
테스트 에서 이 기능 을 사용 하면 프로그램 컨 텍스트 를 아무리 사용 하 더 라 도 전체 테스트 세트 가 같은 데이터 베 이 스 를 다시 사용 한 다 는 것 을 알 수 있 습 니 다.모든 컨 텍스트 에 별도의 내장 형 데이터 베 이 스 를 확보 하려 면 spring.r2dbc.generate-unique-name 을 true 로 설정 해 야 합 니 다.7.2.데이터베이스 클 라 이언 트 사용
@Component
public class MyBean {
private final DatabaseClient databaseClient;
public MyBean(DatabaseClient databaseClient) {
this.databaseClient = databaseClient;
}
public Flux<Map<String, Object>> someMethod() {
return this.databaseClient.sql("select * from user").fetch().all();
}
}
7.3.Spring Data R2DBC 저장 소Spring Data R2DBC 저장 소 는 데이터 에 접근 할 수 있 는 인 터 페 이 스 를 정의 할 수 있 습 니 다.검색 은 방법 이름 에 따라 자동 으로 생 성 됩 니 다.더 복잡 한 조회 에 대해 서 는 Spring Data 의 Query 주 해 를 사용 하여 방법 을 설명 할 수 있 습 니 다.
Spring Data 저장 소 는 보통 Repository 나 CrudRepository 인터페이스 에서 확 장 됩 니 다.
public interface CityRepository extends Repository<City, Long> {
Mono<City> findByNameAndStateAllIgnoringCase(String name, String state);
}
이 SpringBoot 는 SQL 데이터 베 이 스 를 어떻게 사용 합 니까?의 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 SpringBoot 는 SQL 데이터 베 이 스 를 사용 하 는 내용 입 니 다.예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.