(1/5) Item Entity, Repository, Test 실습 save Method > 스프링 부트

본문 바로가기

[개발] (1/5) Item Entity, Repository, Test 실습 save Method

필기자
2022-09-08 13:35 2,964 0

본문

Item Entity, Repository, Test 실습 save Method

 

테스트를 위해 새로운 데이터베이스 계정 생성

ID/PW : test/123456

 

프로젝트 구조

 

20220908132616_ddfa29dc4cb6a70c618839d7aa582e62_aqzw.png

 

 

아래 내용은 꼭 실시하지 않아도됨. sql log를 조금 더 편하게 보기 위해 설정

pom.xml <dependencies>에 p6spy-spring-boot-starter 추가하기



<!-- p6spy sql 로그-->
<dependency>
   <groupId>com.github.gavlyukovskiy</groupId>
   <artifactId>p6spy-spring-boot-starter</artifactId>
   <version>1.8.0</version>
</dependency>

 

kr/hull/shop/config/CustomP6spySqlFormat.java



public class CustomP6spySqlFormat implements MessageFormattingStrategy {
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        sql = formatSql(category, sql);
        return now + "|" + elapsed + "ms|" + category + "|connection " + connectionId + "|" + sql;
    }

    private String formatSql(String category,String sql) {
        if(sql ==null || sql.trim().equals("")) return sql;
        
        // Only format Statement, distinguish DDL And DML
        if (Category.STATEMENT.getName().equals(category)) {
            String tmpsql = sql.trim().toLowerCase(Locale.ROOT);
            if(tmpsql.startsWith("create") || tmpsql.startsWith("alter") || tmpsql.startsWith("comment")) {
                sql = FormatStyle.DDL.getFormatter().format(sql);
            }else {
                sql = FormatStyle.BASIC.getFormatter().format(sql);
            }
        }
        return sql;
    }
}

 

kr/hull/shop/config/P6spyLogMessageFormatConfiguration.java



/**
 * query multi line custom configure
 */
@Configuration
public class P6spyLogMessageFormatConfiguration {
    @PostConstruct
    public void setLogMessageFormat() {
        P6SpyOptions.getActiveInstance().setLogMessageFormat(CustomP6spySqlFormat.class.getName());
    }
}

 

/resources/application.properties 에 아래 내용추가



#p6spy DB 쿼리 출력 실서버 사용시 false 설정, 기본은 true
decorator.datasource.p6spy.enable-logging=true

 

이후 부터 Item Entity, Repositroy, Test 실습 실행

 

kr/hull/shop/constant/ItemSellStatus.java



public enum ItemSellStatus {
    SELL, SOLD_OUT
}

 

src/main/java/kr/hull/shop/entity/Item.java



@Entity
@Table(name="item")
@Getter
@Setter
@ToString
public class Item{

    @Id
    @Column(name="item_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;       //상품 코드

    @Column(nullable = false, length = 50)
    private String itemNm; //상품명

    @Column(name="price", nullable = false)
    private int price; //가격

    @Column(nullable = false)
    private int stockNumber; //재고수량

    @Lob
    @Column(nullable = false)
    private String itemDetail; //상품 상세 설명

    @Enumerated(EnumType.STRING)
    private ItemSellStatus itemSellStatus; //상품 판매 상태

    private LocalDateTime regTime; // 동록 시간

    private LocalDateTime updateTime; // 수정 시간

}

 

kr/hull/shop/repository/ItemRepository.java



public interface ItemRepository extends JpaRepository<Item, Long> {
}

 

20220908134317_ddfa29dc4cb6a70c618839d7aa582e62_jwfz.png

 

20220908134408_ddfa29dc4cb6a70c618839d7aa582e62_v32k.png

 

자동으로 src/test/java/kr/hull/shop/repository/ItemRepositoryTest.java 파일 생성. 다음 내용 추가



@SpringBootTest // 테스트 실행시 모든 Bean을 IoC 컨테이너에 등록 = 스프링부트 구동과 동일한 환경 조건
@TestPropertySource(locations="classpath:application-test.properties") // 테스트 실행시 우선되는 설정파일
class ItemRepositoryTest {
    @Autowired // 필드 Bean 주입
    ItemRepository itemRepository;

    @Test // Method 테스트 대상 지정
    @DisplayName("상품 저장 확인") // 테스트명
    public void createItemTest(){
        Item item = new Item();
        item.setItemNm("좋은 상품");
        item.setPrice(10000);
        item.setItemDetail("좋은 상품 설명");
        item.setItemSellStatus(ItemSellStatus.SELL);
        item.setStockNumber(100);
        item.setRegTime(LocalDateTime.now());
        item.setUpdateTime(LocalDateTime.now());
        Item savedItem = itemRepository.save(item);
        System.out.println(savedItem.toString());
    }    
}

 

/resources/application.properties 최종 내용



#서버 포트
server.port=8080

#MySQL 접속 정보
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/shop?serverTimezone=UTC
#spring.datasource.username=shop
#spring.datasource.password=123456

#MariaDB 접속 정보(?characterEncoding=UTF-8&serverTimezone=UTC)
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3307/shop
spring.datasource.username=shop
spring.datasource.password=123456

#p6spy DB 쿼리 출력 실서버 사용시 false 설정, 기본은 true
decorator.datasource.p6spy.enable-logging=true

# DB 구동 모드
spring.jpa.hibernate.ddl-auto=create

#SQL 쿼리 출력
#spring.jpa.properties.hibernate.show_sql=true

#SQL 포맷 템플릿
#spring.jpa.properties.hibernate.format_sql=true

#SQ 물음표(값) 매칭 파라미터 출력
#logging.level.org.hibernate.type.descriptor.sql=trace

#MySQL 방언(dialect) 설정
#spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

#MariaDB 방언(dialect) 설정
spring.jpa.database-platform=org.hibernate.dialect.MariaDB103Dialect

 

/resources/application-test.properties 새로 생성



spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3307/test
#테스트 계정 새로 생성해서 부여
spring.datasource.username=test
spring.datasource.password=123456

# DB 모드
spring.jpa.hibernate.ddl-auto=create

#MariaDB 방언(dialect) 설정
spring.jpa.database-platform=org.hibernate.dialect.MariaDB103Dialect

 

결과

 

20220908135027_ddfa29dc4cb6a70c618839d7aa582e62_pv28.png

 

DB 확인

 

20220908135115_ddfa29dc4cb6a70c618839d7aa582e62_2j8j.png

 

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색