본문 바로가기

BackEnd/Spring

[코드로 배우는 스프링 웹 프로젝트] ch08 영속/비즈니스 계층의 CRUD 구현 1(select, 테이블 출력)

728x90
반응형

◎ 데이터베이스를 이용한 CRUD 진행 순서

   ▷ 테이블 칼럼 구조를 반영하는 VO(Value Object) 클래스 생성

   ▷ MyBatis의 Mapper 인터페이스 작성/XML 처리

   ▷ 작성한 Mapper 인터페이스의 테스트

 

 

1. 영속 계층의 구현 준비

   ▷ 대부분 웹 애플리케이션의 최종 목적은 데이터베이스에 데이터를 기록하거나 원하는 데이터를 가져오는 것

      ▶ 따라서, 개발시 어느 정도 설계가 진행되면 데이터 베이스 관련 작업을 함

 

◎ VO 클래스의 작성

◎ tbl_board의 테이블 구성


◎ src/main/java → org.codehows.domain → BoardVO 클래스 생성

 
package org.codehows.domain;

import java.util.Date;

import lombok.Data;

@Data
public class BoardVO {
​​​​
​​​​private Long bno;
​​​​private String title;
​​​​private String content;
​​​​private String writer;
​​​​private Date regdate;
​​​​private Date updateDate;
}


root-context.xml의 일부를 활용해 프로젝트를 제작할 수 있습니다.

<mybatis-spring:scan base-package="org.codehows.mapper"/>

 

◎ src/main/java → org.codehows.mapper → BoardMapper.java 인터페이스 생성

package org.codehows.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;
import org.codehows.domain.BoardVO;

public interface BoardMapper {
​​​​@Select("select * from tbl_board where bno > 0")
​​​​public List<BoardVO> getList();
​​​​​​​​}

 

 

◎ src/test/java → org.codehows.mapper → BoardMapperTests.java 클래스 생성

package org.codehows.mapper;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
// Java Config
// @ContextConfiguration(classes = {org.codehows.config.RootConfig.class})
@Log4j
public class BoardMapperTests {
​​​​@Setter(onMethod_ = @Autowired)
​​​​private BoardMapper mapper;
​​​​
​​​​@Test
​​​​public void testGetList() {
​​​​​​​​mapper.getList().forEach(board -> log.info(board));
​​​​}
}


BoardMapperTests 클래스는 스프링을 이용해서 BoardMapper 인터페이스의 구현체를 입받아 동작하게 합니다.
testGetList()의 결과는 SQL Developer에서 실행된 것과 동일해야 정상적으로 동작한 것입니다.

오라클에서 commit을 실행하면 아래와 같은 결과가 나타납니다.

 

 

◎ 오라클을 사용하기 위해서는 ojdbc8.jar 파일을 추가해야 함

1. 프로젝트 우클릭 → Java Build Path → Add Externla JARs... → ojdbc8.jar 파일 추가


2. Deployment Assembly → Add → Java Build Path Entries → ojdbc8.jar 추가

 

◎ Mapper XML 파일

   ▷ src/main/resources → org/codehows/mapper 패키지 생성 → BoardMapper.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">
<mapper namespace="org.codehows.mapper.BoardMapper">

<select id="getList" resultType="org.codehows.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno > 0
]]>
</select>
</mapper>


▷ xml 작성시 <mapper>의 namespace 속성 값을 mapper 인터페이스와 동일한 이름을 주는 것에 주의
 <select> 태그의 id 속성 값은 메소드의 이름과 일치해야 함
 resultType 속성 값은 select 쿼리의 결과를 특정 클래스의 객체로 만들기 위해 사용


◎ BoardMapper 인터페이스의 내용 수정
   ▷ 작성했던 sql 구문을 주석처리

public interface BoardMapper {
	// @Select("select * from tbl_board where bno > 0")
	public List<BoardVO> getList();
}

 
이후 다시 BoardMapperTest 클래스를 실행하면 테이블이 아래와 같이 동일하게 나타납니다.

 

데이터베이스를 이용한 CRUD 진행을 위해 클래스 및 인터페이스 등을 생성해보았습니다.

 

다음 글부터 CRUD를 이용한 예제들을 다뤄볼게요!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형