본문 바로가기
Back-End/Spring Boot

Spring - MyBatis VO 작업

by 코젼 2022. 7. 25.
728x90
반응형

2022-07-25(26일차)


💡MyBatis 관련 라이브러리 추가

💁‍♀️MyBatis 추가

🔸Maven 프로젝트 MyBatis 추가
▪️ pom.xml에 디펜던시 추가
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.2.2</version>
</dependency>​

▪️ pom.xml 선택 후 마우스 우클릭 > Maven > Update Project


🔸Gradle 프로젝트 MyBatis 추가
▪️ build.gradle 에 디펜던시 추가
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'​

▪️ build.gradle 선택 후 마우스 우클릭 > Gradle > Refresh Gradle Projec


💁‍♀️log4jdbc 추가 (SQL 로그 출력)

🔸Maven
▪️ pom.xml

<dependency>
 <groupId>org.bgee.log4jdbc-log4j2</groupId>
 <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
 <version>1.16</version>
</dependency>

 


🔸Gradle
▪️ Build.gradle

implementation group: 'org.bgee.log4jdbc-log4j2', name: 'log4jdbc-log4j2-
jdbc4.1', version: '1.16'


💡로그 설정

▪️ src/main/resources에 파일을 추가한다.

▪️ 경로 중요하다.
<logger name="com.shop" level="info"/>​
프로그램에 맞춰서 수정해야한다.

🔸log level
▪️ info : 강조 정보
▪️ debug : 디버깅
▪️ warning : 실행이 되고, 에러는 아니나 수정하라고 알려준다. (경고)
▪️ error : 에러

▪️ debug레벨 이하(info)를 주어야 정상적으로 작동된다.

▪️ 에러, 정상, 모두 다 보여준다(info)

 


📃logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
    </appender>

    <logger name="com.shop" level="info"/>

    <!-- log4j2-jdbc4 -->
    <logger name="jdbc" level="OFF" />
    <logger name="jdbc.sqlonly" level="OFF" />
    <logger name="jdbc.sqltiming" level="DEBUG" />
    <logger name="jdbc.resultset" level="OFF" />
    <logger name="jdbc.resultsettable" level="DEBUG" />
    <logger name="jdbc.connection" level="OFF" />
    <!-- log4j2-jdbc4 -->
    
    <root level="off">
        <appender-ref ref="console"/>
    </root>
</configuration>​
Design을 클릭해 내용을 확인할 수 있다.
Source를 클릭하면 소스 파일이 보여진다.

📃log4jdbc.log4j2.Properties
log4jdbc.log4j2.Properties
0.00MB

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0​

추가 후 사진


💡SQL 로그 출력 설정

▪️ application.properties 에 다음 항목 추가

#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
#spring.datasource.url=jdbc:mysql://localhost:3306/shop?serverTimezone=UT
C
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/shop?serverTimez
one=UTC​

기존 mysql를 변경

▪️ 기존 mysql 소스

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/shop?serverTimezone=UTC

💡Query Xml 경로 설정

▪️ application.properties 에 다음 항목 추가
▪️ all : **
▪️ classpath 경로 : src/main/resources
# mybatis
mybatis.mapper-locations=classpath:mybatis/mapper/**/**.xml​

💡VO 생성

▪️ 테이블 컬럼명으로 선언한다.
▪️ Lombok 이용을 위해 @Data 추가

▪️ entity는 테이블을 만든다. -- 실제로 db와 관련이 있다.
▪️ dto는 컨트롤러, 서비스 사이에서 정보를 주고받을때 정보를 담고, 테이블을 만들지 않는다.

com.shop.vo 패키지를 생성한다.
실제로 db와 관련있는 것


▪️ member와 cart는 1:1이기 때문에 일대일 대응 관계이다.
▪️ Cart는 다수, Item도 다수이기 때문에 중간에 (다:1, 1:다) 로 거쳐주는 CartItem이 필요하다.
▪️ Cart, Item, Member, Order를 테이블로 구분지을 수 있다.

▪️ entitiy에 있는 java파일들을 복사해서 vo에 넣는다.

com.shop.entitiy에 있는 Cart, Item, Member, Order 파일


💡JPA 삭제 -- ( JPA 사용 X )

jpa 삭제

📃Member.java

▪️ JPA를 삭제하고 정리한 소스이다.

package com.shop.vo;

import com.shop.constant.Role;
import com.shop.dto.MemberFormDto;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.security.crypto.password.PasswordEncoder;

import javax.persistence.*;


@Getter @Setter
@ToString
public class Member {
    private Long id;
    private String name;
    private String email;
    private String password;
    private String address;
    private Role role;
}
▪️ 객체간 주고받을 때, _를 사용하는 snake_case표기법이 아닌 camelCase를 사용한다.
ex) member_id -> memberId (camelCase)
▪️ 자바에서 객체로 인식하려면 하단처럼 바꿀 것

▪️ Ctrl  + Shift + O를 누르면 사용하지 않는 라이브러리들은 자동으로 삭제된다.

package com.shop.vo;

import com.shop.constant.Role;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;


@Getter @Setter
@ToString
public class Member {
    private Long memberId;
    private String name;
    private String email;
    private String password;
    private String address;
    private Role role;
}

▪️ @Getter @Setter @ToString을 모두 사용한다면 @Data로 바꿀 수 있다.

package com.shop.vo;

import com.shop.constant.Role;

import lombok.Data;


@Data
public class Member {
    private Long memberId;
    private String name;
    private String email;
    private String password;
    private String address;
    private Role role;
}

💡HeidiSQL에서 db 확인하기

▪️ db에는 있으나, Member클래스에는 없는 정보를 가져온다.
▪️ reg_time, update_time, create_by, modified_by가 존재하지 않는다.

▪️ reg_time, update_time은 db에서 데이터 유형이 DATETIME이다.
▪️ mysql datetime == java timestamp 이므로 timestamp타입으로 가져온다.

Timestamp 타입을 사용한다.

▪️ 자바객체, db객체를 가져올 거기때문에 java.sql 라이브러리를 가져온다.

package com.shop.vo;

import java.sql.Timestamp;

import com.shop.constant.Role;

import lombok.Data;


@Data
public class Member {
    private Long memberId;
    private String name;
    private String email;
    private String password;
    private String address;
    private Role role;
    private Timestamp regTime;
    private Timestamp updateTime;
    private String createdBy;
    private String modifiedBy;
}

▪️ 동일한 방법으로 com.shop.entitiy에 있는 Cart, Item, Order 파일도 추가한다.


 

📃Cart.java

package com.shop.vo;

import java.sql.Timestamp;

import lombok.Data;

@Data
public class Cart {
    private Long cartId;
    private String memberId;
    
    private Timestamp regTime;
    private Timestamp updateTime;
    private String createdBy;
    private String modifiedBy;
}

📃db


📃Item.java

package com.shop.vo;

import java.sql.Timestamp;

import com.shop.constant.ItemSellStatus;

import lombok.Data;

@Data
public class Item { 
    private Long itemId;
    private String itemNm; 
    private int price;
    private int stockNumber;
    private String itemDetail; 
    private ItemSellStatus itemSellStatus; 
  
    private Timestamp regTime;
    private Timestamp updateTime;
    private String createdBy;
    private String modifiedBy;
}

📃db


📃Orders.java

package com.shop.vo;

import java.sql.Timestamp;
import java.time.LocalDateTime;

import com.shop.constant.OrderStatus;

import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class Orders {
    private Long ordeId;
    private Member member;
    private String memberId;

    private LocalDateTime orderDate; 

    private OrderStatus orderStatus;
    
    private Timestamp regTime;
    private Timestamp updateTime;
    private String createdBy;
    private String modifiedBy;
}

클래스 이름 동일할 것
테이블이름이 orders로 바뀌어져있기 때문에 class이름을 Orders를 변경한다. 문법적인 문제는 없지만 테이블 매칭을 잘 찾기위함이다.

📃db


💡샘플용 파일을 만든다.

새로운 클래스를 만든다.
클래스 이름은 SampleVO라고 둔다.
lombok @Data를 사용해 SampleVO 변수들을 정의하면 우측 Outline에 자동으로 getter, setter, toString 함수들이 추가된 것을 확인할 수 있다.

 

728x90
반응형

댓글