[개발] (1/5) Item Entity, Repository, Test 실습 save Method
필기자
2022-09-08 13:35
6,621
0
본문
Item Entity, Repository, Test 실습 save Method
테스트를 위해 새로운 데이터베이스 계정 생성
ID/PW : test/123456
프로젝트 구조
아래 내용은 꼭 실시하지 않아도됨. 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> {
}
자동으로 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
결과
DB 확인
댓글목록0