일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- collection python
- 춥고 더운 우리 집
- 파이썬 컬렉션
- leftJoin
- 리트허브 커밋
- 리트허브 오류
- 2-layered architecture
- 파이썬 특정 문자 제거하기
- 개발자 취준
- 알고리즘
- 배열의 유사도 파이썬
- 비지니스 레이어
- 슈츠 자막
- 프로그래머스 배열 회전시키기
- 가위바위보 풀이
- 프로그래머스 가위바위보 풀이
- 리트허브 사용법
- 프로그래머스 가위바위보
- 프로그래머스 특정 문자 제거하기
- 특정문자 제거하기
- 스프링 시스템 구조
- programmers 배열 회전
- 프로그래머스 배열의 유사도 파이썬
- Programmers 배열의 유사도
- 프로그래머스
- BigO notation
- 프레젠테이션 레이어
- 춥고더운우리집
- 공선옥
- 주니어개발자
- Today
- Total
기억보다 기록을
[Spring] 웹 프로젝트 구현(4) 테이블 생성,더미데이터 추가,영속계층 crud 구현 본문
기본적인 게시판 테이블 sql을 적어주시고요, 더미데이터 추가해줍니다.
(오라클 커밋 잊지마세요)
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);
insert into tbl_board(bno,title,content,writer) VALUES (seq_board.nextval, '제목 테스트', '내용 테스트','user00');
잘 들어왔는지 select 해봅니다.
그럼 sts로 넘어와서 myBatis 를 이용하여 테스트해볼게요
인터페이스 하나 생성해주시고, List로 값을 가져올게요
package com.sample.mapper;
import java.util.List;
import com.sample.domain.BoardVO;
public interface BoardMapper {
List<BoardVO> getList();
}
xml 작성해주세요. resultType은 Alias로 간단하게 적을 수 있지만 여기서는 풀패키지 경로를 적어주었습니다.
<mapper namespace="com.sample.mapper.BoardMapper">
<select id="getList" resultType="com.sample.domain.BoardVO">
select * from tbl_board order by bno desc
</select>
junit 돌려볼게요. 잘 됩니다.
이제 crud를 간단하게 구현해 볼게요
create 입니다.
insert를 할 때 select와 selectkey중 선택할 수 있는데,
selectkey의 경우 생성된 pk값을 알아야할 때 좋습니다.
다만 키를 가져오고 그 다음에 sql이 한번 더 실행되기 때문에
두번 동작하는 꼴이고, 한번만 동작하는 select에 비해서
성능은 느립니다. 코드로 비교하면 다음과 같습니다.
package com.sample.mapper;
import java.util.List;
import com.sample.domain.BoardVO;
public interface BoardMapper {
List<BoardVO> getList();
void insert(BoardVO board);
void insertSelectKey(BoardVO board);
}
위에서 말한 두번 동작한다는게 요 xml보면 아시겠쥬
<insert id="insert">
insert into tbl_board (bno,title,content,writer)
values (seq_board.nextval,#{title},#{content},#{writer})
</insert>
<insert id="insertSelectKey">
<selectKey order="BEFORE" keyProperty="bno" resultType="long">
select seq_board.nextval from dual
</selectKey>
insert into tbl_board (bno,title,content,writer)
values (#{bno},#{title},#{content},#{writer})
</insert>
테스트 돌려서 잘 인서트 됐는지 확인해주세요
@Test
public void testInsert() {
BoardVO vo= new BoardVO();
vo.setTitle("title 테스트");
vo.setContent("content 테스트");
vo.setWriter("writer 테스트");
boardMapper.insert(vo);
}
@Test
public void insertSelectKey() {
BoardVO vo= new BoardVO();
vo.setTitle("selectkey title 테스트");
vo.setContent("selectkey content 테스트");
vo.setWriter("selectkey writer 테스트");
boardMapper.insertSelectKey(vo);
}
read는 pk값을 가지고 불러오면 되겠쥬
리턴타입을 select에서는 void로 줬지만
여기선 boardVO 타입으로 주면 되겠습니다.
파리미터에는 pk값을 적어주시고요
xml은 select로 적어주세요.
마찬가지로 테스트합니다.
package com.sample.mapper;
import java.util.List;
import com.sample.domain.BoardVO;
public interface BoardMapper {
List<BoardVO> getList();
void insert(BoardVO board);
void insertSelectKey(BoardVO board);
BoardVO read(Long bno);
}
<select id="read" resultType="com.sample.domain.BoardVO">
select * from tbl_board where bno=#{bno}
</select>
@Test
public void testRead() {
BoardVO vo = boardMapper.read(11L);
log.info(vo);
}
db의 11번 데이터를 테스트했습니다.
이제 delete, update 해볼게요. 둘 다 int 타입으로 리턴받는게 좋습니다.
몇번을 삭제했고 수정했는지 개발자가 알고싶은 경우가 많기 때문입니다. update의 경우 여러개를 던져야하기 때문에 파라미터는 boardVO로 써주겠습니다.
int delete(Long bno);
int update(BoardVO board);
<delete id="delete">
delete from tbl_board where bno=#{bno}
</delete>
<update id="update">
update tbl_board
set title=#{title},
content=#{content},
writer=#{writer},
updatedate = sysdate
where bno= #{bno}
</update>
@Test
public void testDelete() {
int count = boardMapper.delete(1L);
log.info("count:::"+count);
}
@Test
public void testUpdate() {
BoardVO vo= new BoardVO();
vo.setBno(11L);
vo.setTitle("title Update 테스트");
vo.setContent("content Update 테스트");
vo.setWriter(" writer Update 테스트");
log.info("Count: "+boardMapper.update(vo));
}
}
아까 insert한 11번 데이터를 update해주었습니다.
잘 되었습니다.
이렇게 persistence 계층의 crud를 진행해봤고요, 다음 5편에서는
서비스 계층을 구현할게요!
'Development > Spring' 카테고리의 다른 글
[Spring] 웹 프로젝트 구현(6) 프레젠테이션 계층 구현/테스트/get과 post/post로 등록처리 (0) | 2022.02.24 |
---|---|
[Spring] 웹 프로젝트 구현(5) 비즈니스 계층 crud 구현/테스트 (0) | 2022.02.24 |
[Spring] 웹 프로젝트 구현(3) myBatis 연결, 왜 xml을 써야할까, xml처리,log4jdbc (0) | 2022.02.22 |
[Spring] 웹 프로젝트 구현(2) JDBC,커넥션 풀(HikariCP) 연결,HikariCP를 왜 쓸까? (0) | 2022.02.22 |
[Spring] 웹 프로젝트 구현(1) 환경설정/의존성 주입(DI)이란?/오라클 설치 (0) | 2022.02.21 |