본문 바로가기

Java/Spring Boot

(Spring Boot) - window에서 JPA사용해 tibero와 연동하기

반응형

🍳머리말

tibero와 spring boot를 연동해보는 예제 설명글입니다.

모두 local환경입니다. {}로 감싼 부분은 직접 입력하는 부분입니다.


📕 Tibero6

📔 설치

tibero설치는 다음 글을 따라가시면 됩니다.

https://codecollector.tistory.com/1613

 

(Tibero) - Window에 설치 및 연결해보기

🍳머리말 local환경에서 Tibero6과 TiberoStudio2를 설치하고 연결해보는 설명글입니다. 📕 Tibero6 📔 installer download 설치 가능한 license가 있다고 가정하고 spring boot library에 넣을 tibero6을 설치..

codecollector.tistory.com

 

📔 확인

정상 설치 후

C:\TmaxData\tibero6\client\lib\jar 경로에서 tibero6-jdbc.jar file이 있는지 확인합니다.


📕 Spring Boot JPA

📔 project 생성

 

spring initializer로 다음처럼 설정 후 만들어줍니다.

https://start.spring.io/

 

압축을 풀고 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번 실행했을 때 정보입니다.


*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.