Spring legacy project에 mybatis 연동하기

김선미·2022년 11월 7일

DB 테이블 생성

DROP TABLE FP_MEMBER;
CREATE TABLE FP_MEMBER(
	member_no INT,
	member_id VARCHAR(20),
	member_pw VARCHAR(100),
	member_nick VARCHAR(20),
	member_gender VARCHAR(1),
	member_birth DATE,
	member_phone VARCHAR(30),
	member_email VARCHAR(100),
	member_createdate DATE
);

DROP SEQUENCE FP_MEMBER_seq;
CREATE SEQUENCE FP_MEMBER_seq;

DB 연동

  • DB TABLE 생성 시 항상 프로젝트에 Value Object 클래스를 생성한다.
public class MemberVo {
	private int member_no;
	private String member_id;
	private String member_pw;
	private String member_nick;
	private String member_gender;
	private Date member_birth;
	private String member_phone;
	private String member_email;
	private Date member_createdate;
}
  • 테이블과 동일한 컬럼들을 작성
  • 기본 생성자 작성 : source - Generate Constructor using fields - deselect all - generate
  • 생성자 작성 : source - Generate Constructor using fields - select all - generate
  • Getter, Setter 작성: source - Generate Getter and Setter - Select all
public class MemberVo {
	private int member_no;
	private String member_id;
	private String member_pw;
	private String member_nick;
	private String member_gender;
	private Date member_birth;
	private String member_phone;
	private String member_email;
	private Date member_createdate;

    //기본 생성자 - 필수
	public MemberVo() {
		super();
	}

    //생성자 - 필수 아님
	public MemberVo(int member_no, String member_id, String member_pw, String member_nick, String member_gender,
			Date member_birth, String member_phone, String member_email, Date member_createdate) {
		super();
		
		this.member_no = member_no;
		this.member_id = member_id;
		this.member_pw = member_pw;
		this.member_nick = member_nick;
		this.member_gender = member_gender;
		this.member_birth = member_birth;
		this.member_phone = member_phone;
		this.member_email = member_email;
		this.member_createdate = member_createdate;
	}

    //Getter, Setter - 필수
    public int getMember_no() {
		return member_no;
	}


	public void setMember_no(int member_no) {
		this.member_no = member_no;
	}


	public String getMember_id() {
		return member_id;
	}


	public void setMember_id(String member_id) {
		this.member_id = member_id;
	}


	public String getMember_pw() {
		return member_pw;
	}


	public void setMember_pw(String member_pw) {
		this.member_pw = member_pw;
	}


	public String getMember_nick() {
		return member_nick;
	}


	public void setMember_nick(String member_nick) {
		this.member_nick = member_nick;
	}


	public String getMember_gender() {
		return member_gender;
	}


	public void setMember_gender(String member_gender) {
		this.member_gender = member_gender;
	}


	public Date getMember_birth() {
		return member_birth;
	}


	public void setMember_birth(Date member_birth) {
		this.member_birth = member_birth;
	}


	public String getMember_phone() {
		return member_phone;
	}


	public void setMember_phone(String member_phone) {
		this.member_phone = member_phone;
	}


	public String getMember_email() {
		return member_email;
	}


	public void setMember_email(String member_email) {
		this.member_email = member_email;
	}


	public Date getMember_createdate() {
		return member_createdate;
	}


	public void setMember_createdate(Date member_createdate) {
		this.member_createdate = member_createdate;
	}
}

Date

java.sql.Date 는 java.util.Date 를 상속받은 클래스이다.

  • 출력 형태의 차이로 에러가 발생할 수 있다.

    • java.sql.Date : 1997-01-01
    • java.util.Date : 1997/01/01
  • form 태그로 데이터 전송시 날짜가 1997-01-01 형태로 전송된다.

  • DateTimeFormat 어노테이션으로 변환해준다.

	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date member_birth;

Spring regacy project DI

	@Autowired
	private MemberService memberService;

Autowired 를 사용해 의존성 주입한다.

Mybatis 연동

조건

  • pom.xml : mybatis dependency 추가 되어야 함
<!-- Mybatis 관련 라이브러리 추가.. -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>			
		</dependency>
		
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>		
		</dependency>
		
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>					
		</dependency>
	
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
  • src - main - webapp - WEB-INF - Spring - root-context.xml
    • namespace : mybatis-spring 체크
    • 설정 추가
	<!-- DataSource 인스턴스 생성 및 등록 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        //dbcp 방식 공부 추천
		<property name="driverClassName" 
		value="oracle.jdbc.driver.OracleDriver"></property>
        //오라클 연동, 다른 db 연동 가능, OracleDriver 의존성 추가 필요
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
		<property name="username" value="오라클 사용자이름"></property>
		<property name="password" value="오라클 비밀번호"></property>
	</bean>	
	
	<bean id="sqlSessionFactory" 
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
	</bean>

	<mybatis-spring:scan base-package="com.example.finalproject.*.mapper"/>
    //"com.example.finalproject.member.mapper" 라는 패키지를 생성하고 mapper 인터페이스를 생성해야 함
  • pom.xml OracleDriver 의존성 추가
    • maven repository - ojdbc8
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>21.1.0.0</version>
</dependency>
  • MemberSqlMapper 인터페이스 작성
    • 메소드 작성
  • xml 작성
    • src/main/resources
    • new - folder - com/example/finalproject/member/mapper (mapper 인터페이스 패키지와 동일한 폴더 생성) - finish
    • mapper - new - xml file - MemberSqlMapper.xml (mapper 인터페이스와 동일한 이름) 생성
    • xml 파일 안에 아래 코드 추가
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  • xml 파일에 쿼리 추가
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

//namespace는 인터페이스 패키지와 인터페이스명을 입력한다.
<mapper namespace="com.example.finalproject.member.mapper.MemberSqlMapper">
	<insert id="joinMember">
		INSERT INTO FP_MEMBER VALUES(
			FP_MEMBER_seq.nextval,
			#{member_id},
			#{member_pw},
			#{member_nick},
			#{member_gender},
			#{member_birth},
			#{member_phone},
			#{member_email},
			SYSDATE
		)
	</insert>
</mapper>

실행

  • 서버를 멈춘 상태로 프로젝트와 서버를 업데이트한 다음 서버를 재실행한다.
    • package exploler에서 우클릭 - maven - update project
    • server - publish to the server
profile
백엔드 개발 공부

0개의 댓글