🍳머리말
tibero와 spring boot를 연동해보는 예제 설명글입니다.
모두 local환경입니다. {}로 감싼 부분은 직접 입력하는 부분입니다.
📕 Tibero6
📔 설치
tibero설치는 다음 글을 따라가시면 됩니다.
https://codecollector.tistory.com/1613
📔 확인
정상 설치 후
C:\TmaxData\tibero6\client\lib\jar 경로에서 tibero6-jdbc.jar file이 있는지 확인합니다.
📕 Spring Boot JPA
📔 project 생성
spring initializer로 다음처럼 설정 후 만들어줍니다.
압축을 풀고 intellij에서 해당 project를 열어줍니다.
📔 tibero library추가
확인했던 tibero6-jdbc-14.jar 를 src folder와 같은 level에 libs folder를 만들어 {project명}/libs 하위에 넣어줍니다.
📔 build gradle 설정
dependencies에 추가한 jar의 경로를 넣어 build해줍니다.
plugins {
id 'org.springframework.boot' version '2.7.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation files('libs/tibero6-jdbc.jar')
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
tasks.named('test') {
useJUnitPlatform()
}
📔 application.properties
spring.datasource.url=jdbc:tibero:thin:@127.0.0.1:8629:tibero
spring.datasource.driver-class-name=com.tmax.tibero.jdbc.TbDriver
spring.datasource.username={db schema}
spring.datasource.password={db비번}
#문법정의 tibero는 oracle을 사용
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
#ddl문 자동생성
spring.jpa.hibernate.ddl-auto=update
#출력 format 예쁘게 조정
spring.jpa.properties.hibernate.format_sql=true
#db와 mapping설정
spring.jpa.hibernate.use-new-id-generator-mappings=true
#sql log terminal에 출력
spring.jpa.show-sql=true
📔 entity
com.example.tibero package하위에 entity folder를 생성합니다. 이후 하위 file을 생성합니다.
TiberoItem.java
package com.example.tibero.entity;
import lombok.*;
import javax.persistence.*;
@Entity //jpa entity 로 선언
@Table(name="tibero_test") //table명
@Getter @Setter //getter, setter 메소드
@NoArgsConstructor //인자 없는 기본 생성자
@AllArgsConstructor //모든 인자 가지는 생성자
@Builder //빌더 패턴으로 생성
public class TiberoItem {
@Id //pk정의. 필수
@GeneratedValue(strategy = GenerationType.AUTO) //AUTO_INCREMENT
@Column(name="id", nullable = false) //테이블 컬럼과 매핑
private Long id;
@Column(name="name", nullable = false, length = 255)
private String name;
@Column(name="sold", nullable = false)
private boolean sold;
}
📔 repository
com.example.tibero package하위에 repository folder를 생성합니다. 이후 하위 file을 생성합니다.
TiberoItemRepository.java
package com.example.tibero.repository;
import com.example.tibero.entity.TiberoItem;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TiberoItemRepository extends JpaRepository<TiberoItem, Long> {
}
📔 service
com.example.tibero package하위에 svc folder를 생성합니다. 이후 하위 file을 생성합니다.
TiberoItemService.java
package com.example.tibero.svc;
import com.example.tibero.entity.TiberoItem;
import com.example.tibero.repository.TiberoItemRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TiberoItemService {
@Autowired
private TiberoItemRepository tiberoItemRepository;
public List<TiberoItem> getTiberoItems() {
List<TiberoItem> tiberoItems = tiberoItemRepository.findAll();
if(!tiberoItems.isEmpty()) return tiberoItemRepository.findAll();
else throw new IllegalArgumentException("no such data");
}
public TiberoItem getTiberoItemById(final Long id) {
return tiberoItemRepository.findById(id).orElseThrow(()-> new IllegalArgumentException("no such data"));
}
public TiberoItem createTiberoItem(final TiberoItem createTiberoItem) {
if(createTiberoItem == null) throw new IllegalArgumentException("item cannot be null");
return tiberoItemRepository.save(createTiberoItem);
}
public TiberoItem updateTiberoItem(final long id, final TiberoItem updateTiberoItem) {
TiberoItem tiberoItem = getTiberoItemById(id);
tiberoItem.setName(updateTiberoItem.getName());
tiberoItem.setSold(updateTiberoItem.isSold());
return tiberoItemRepository.save(tiberoItem);
}
public void deleteTiberoItemById(final Long id) {
tiberoItemRepository.deleteById(id);
}
}
📔 실행
이제 application을 실행해봅니다. Hibernate이 terminal상에 다음 log를 보여줍니다.
📔 확인
실제 tibero studio상에 새로운 table이 생성되어 있는 것을 확인할 수 있습니다.
📕 Spring Boot Service
기존에 만든 것에 controller를 추가, get method로 호출해 service객체를 통한 table 생성 예제를 작성합니다.
📔 build.gradle
dependencies에 추가합니다.
implementation 'org.springframework.boot:spring-boot-starter-web'
gradle을 새로고침해줍니다.
📔 controller
요청에 대한 mapping을 처리할 controller를 정의해줍니다.
com.example.tibero package하위에 controller folder를 생성합니다. 이후 하위 file을 생성합니다.
TiberoItemCreateController.java
package com.example.tibero.controller;
import com.example.tibero.entity.TiberoItem;
import com.example.tibero.svc.TiberoItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1/item/table")
public class TiberoItemCreateController {
@Autowired
private TiberoItemService tiberoItemService;
@GetMapping("create")
public void InsertItem(@RequestParam String name, boolean sold) {
TiberoItem tiberoItem = new TiberoItem();
tiberoItem.setName(name);
tiberoItem.setSold(sold);
tiberoItemService.createTiberoItem(tiberoItem);
}
}
📔 실행
application을 실행 후 다음 url로 get 요청을 보내봅니다
http://localhost:8080/api/v1/item/table/create?name=%22hi%22&sold=true
terminal log에선 다음과 같은 sql문이 실행됨을 보여줍니다.
tibero studio상에서 tibero_test table에 대한 정보를 조회해봅니다. 다음처럼 2번 실행했을 때 정보입니다.
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.