1. boardpro 유저에 접속하여 tbl_board 테이블 생성 작업을 진행
create sequence seq_board;
create table tbl_board(
bno number(10,0),
title varchar2(200) not null,
content varchar2(2000) not null,
writer varchar2(50) not null,
regdate date default sysdate,
updatedate date default sysdate
);
alter table tbl_board add constraint pk_board
primary key(bno);
- seq_board : 일련번호를 위한 sequence
- tbl_board : 게시물 저장을 위한 테이블
- pk : bno
테이블이 정상적으로 만들어졌다면 위의 이미지처럼 구조가 나와야 함
반드시 커밋을 해줘야 작업이 반영됨
2. Dummy데이터 추가
다음스크립트를 반복적으로 실행해서 여러 개의 데이터 생성 및 확인
insert into tbl_board(bno,title,content,writer)
values (seq_board.nextval,'테스트제목','테스트내용','user00');
select * from tbl_board; 로 데이터 확인 가능
3. 데이터베이스 관련 root-context.xml 설정
- DataSource 설정
- SqlSessionFactory 설정
- mybatis 설정
`
root-context.xml에 아래의 내용을 추가함
<beans>태그 내부에 넣어야 함
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName"
value="oracle.jdbc.OracleDriver"></property>
<property name="jdbcUrl"
value="jdbc:oracle:thin:@localhost:1521:XE"></property>
<property name="username" value="유저명"></property>
<property name="password" value="유저패스워드"></property>
</bean>
<!-- HikariCP configuration -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
destroy-method="close">
<constructor-arg ref="hikariConfig"></constructor-arg>
</bean>
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
영속 계층의 작업은 항상 다음과 같은 순서로 진행함
1. 테이블을 반영하는 VO클래스 생성
2. MyBatis의 Mapper 인터페이스의 작성 / xml처리
3. 작성한 Mapper 인터페이스의 테스트
다음과 같은 절차대로 데이터베이스에서 정보를 불러와 리스트로 출력하는 코드를 작성해본다.
1. 테이블을 반영하는 VO클래스 생성
(1) 영속계층을 처리할 패키지를 따로 만들어주고 그 안에 VO클래스를 작성할 파일 생성
tbl_board의 구성을 참고해서 만든 클래스는 아래와 같음
package com.taeong.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;
}
@Data : Lombok을 이용해서 생성자와 getter/setter, toString() 등을 만들어내는 어노테이션
2. MyBatis의 Mapper 인터페이스의 작성 / xml처리
(MyBatis에서 SQL을 처리하는 방법에는 어노테이션으로 처리하는 방법도 있음.
그러나 코드를 수정하고 다시 빌드해야하는 작업 등을 해야하기 때문에 유지보수성이 XML보다 떨어짐)
(1) root-context.xml에 아래 코드 추가
<mybatis-spring:scan base-package="com.taeong.mapper" />
root-context.xml에 mappper의 위치를 알려주는 것!
(2) src/main/java에 mapper 패키지를 생성한 후 BoardMapper인터페이스를 추가
package com.taeong.mapper;
import java.util.List;
import com.taeong.domain.BoardVO;
public interface BoardMapper {
public List<BoardVO> getList();
}
(3) src/main/resources에 mapper패키지와 동일한 폴더를 생성 com/taeong/mapper 후 BoardMapper.xml을 생성
BoardMapper.xml을 생성할 때 알아둘 점
- select 태그의 id 속성 값은 BoardMapper 인터페이스의 메소드 이름과 일치해야 함
- resultType 속성의 값은 select 쿼리의 결과를 BoardVO클래스의 객체로 만들기 위해 설정
- CDATA부분은 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="com.taeong.mapper.BoardMapper">
<select id="getList" resultType="com.taeong.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno > 0
]]>
</select>
</mapper>
3. 작성한 Mapper 인터페이스의 테스트
BoardMapperTests.java를 작성하여 DB와 잘 연동되는지 test를 진행 (JUnit Test)
package com.taeong.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")
@Log4j
public class BoardMapperTests {
@Setter(onMethod_ = @Autowired)
private BoardMapper mapper;
@Test
public void testGetList() {
mapper.getList().forEach(board -> log.info(board));
}
}
@Test가 붙은 메소드에 마우스 우클릭 > Run As > JUnit Test를 누르면 콘솔창에서 확인할 수 있다.
같은 방법으로 하나의 데이터만 불러오는 코드를 작성한다.
1. 테이블을 반영하는 VO클래스 생성
vo클래스는 위에서 작성한 내용과 같기 때문에 BoardVO클래스를 그대로 사용한다.
2. MyBatis의 Mapper 인터페이스의 작성 / xml처리
(1) BoardMapper.java에 read메소드 추가
public BoardVO read(Long bno);
(2) BoardMapper.xml에 SQL문 작성
<select id="read" resultType="com.taeong.domain.BoardVO">
select * from tbl_board where bno = #{bno}
</select>
3. 작성한 Mapper 인터페이스의 테스트
@Test
public void testRead() {
BoardVO board = mapper.read(5L); // 원하는 bno값을 입력함, 임의로 bno = 5라고 가정
log.info(board);
}
'Spring > 게시판프로젝트' 카테고리의 다른 글
[Spring] 게시판 프로젝트6 - Presentation계층 구현 (0) | 2021.07.04 |
---|---|
[Spring] 게시판 프로젝트5 - Business 계층 구현 (0) | 2021.07.04 |
[Spring] 게시판 프로젝트4 - Persistence 계층 구현 (insert,delete,update) (0) | 2021.07.03 |
[Spring] 게시판 프로젝트2 - Oracle Database 연동 (0) | 2021.07.02 |
[Spring] 게시판 프로젝트1 - 프로젝트 생성 (0) | 2021.07.02 |
댓글