일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코테
- 개발자취업
- 가상컴퓨팅
- 자바의정석
- 코딩테스트준비
- dfs
- 생성자
- Algorithm
- DB
- 코딩테스트
- 크루스칼
- 알고리즘
- spring
- Java
- 공개키 암호화
- data structure
- Queue
- sql
- BFS
- js
- 자료구조
- python
- 암호학
- jsp
- 문자열
- 항해99
- dbms
- generic class
- JPA
- javascript
- Today
- Total
PLOD
[spring] spring MVC- (1.Model) 본문
일반적으로 모델은 service 클래스와 DAO(Data Access Object)로 구성된다. DAO는 데이터베이스 연동을 담당하는 클래스이며 service 클래스는 DAO를 이용하여 실질적으로 비즈니스 로직을 처리하는 클래스이다.
pom.xml 수정
Maven Repository: Search/Browse/Explore (mvnrepository.com)
이곳에서 Maven 설정 <dependency>들을 추가할 수 있다. pom.xml에 필요한 설정들을 버전 체크 후 가져다 놓고 ,
Alt + F5를 누르면 maven dependency에서 추가된 것을 볼 수 있다.
CRUD구현영속계층에 순서
테이블의 칼럼 구조를 반영하는 VO 클래스 생성을 먼저 생성하도록 하자.
model(vo, DTO) 단계
BoardMapper 인터페이스 생성 -> BoardMapper.xml 생성> BoardMapperTests java 프로그램 생성
controller(business) 단게
BoardService 인터페이스 생성 -> root-context.xml 수정 ->BoardServiceImpl.java 작성 -> BoardServiceTests java
프로그램 생성 (view) 단계
JSP 파일 생성 -> 서버를 통해 화면 구현 확인
persistence tier(Model) | Business(Controller) | Presentation(View) |
데이터 처리(VO,DTO) | Logic(고객이 원하는 요구사항들을 반영) | 화면을 보여주는 기술 |
mybatis,mybatis-spring-DB | spring core | spring MVC |
oracle DB 계정 생성 및 테이블 생성
MySQL이나 OracleDB 에서 데이터를 저장하기 위한 테이블을 생성해야 한다. 기본키(중복,NULL 값 X)를 위한 sequence를 먼저 생성해 준다. 그다음 게시물 저장을 위한 테이블을 생성한다. 테이블 안의 attribute의 데이터 타입과 NOT NULL 조건을 설정해 준다. 그 다음 기본키,외래키와 같은 제약조건을 설정해준다.
spring MVC를 통해 게시판을 해보자 , 영속 계층은 거의 모든 웹 앱의 최종 목적인 DB에 데이터를 기록하거나 가져오는 역할을 해주는 VO,DTO(Mapper.xml)을 만드는 과정이다. 우선 Model 단계에서는 데이터연동하고 처리하는 domain 클래스 (BoardVO) 를 먼저 생성해야 된다. 테이블의 칼럼 구조를 반영하는 VO 클래스 생성을 먼저 생성하도록 하자.
package org.zerock.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;
}
작성된 프로젝트를 이용해서 간단하게 의존성에 대한 기능을 작성하고 테스트 해볼 수 있다. spring에서는 생성자를 이용한 주입으로 의존성 주입(dependency)를 주입할 수 있다.
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
Lombok은 model계층에서 getter,setter및 생성자들을 만들때 꼭 필요한 디렉토리이다. @Data를 통해 필드의 getter와 setter, 기본 constructor, toString등을 자동으로 생성해준다.
다음으로 해야 될 것은 BoardMapper라는 interface를 만드는 것이다. mapper.interface를 만듦으로써 mapper.xml을 통해 Data를 Access할 수 있다.
※ Spring 개발 할 때 model에서 Integer을 사용하지 않고 Long을 사용하는 이유
package org.zerock.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import org.zerock.domain.BoardVO;
import org.zerock.domain.Criteria;
public interface BoardMapper {
//@Select("select * from tbl_board where bno > 0")
public List<BoardVO> getList();
public void insert(BoardVO board);
public Integer insertSelectKey(BoardVO board);
public BoardVO read(Long bno);
public int delete(Long bno);
public int update(BoardVO board);
}
그 다음으로 해야될 일은 MyBatis의 Mapper 인터페이스의 작성, XML 처리(쿼리문작성) 이다. 작성한 Mapper 인터페이스의 테스트를 통해 BoardVO클래스 private변수들을 적극적 추상메서드를 작성하여 필요한 SQL을 어노테이션 속성값으로 처리 할 수 있다. BoardMapperTests클래스에서 적용BoardMapper.xml BoardMapper.java(인터페이스)는 getList (전체리스트 조회) , get (상세 리스트 데이터 조회 ) , insert (데이터 삽입) , read (데이터 조회) , modify (데이터 수정) ,remove (데이터 삭제) 로 이루어져 있다 .
<?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.zerock.mapper.BoardMapper">
<select id = "getList" resultType = "org.zerock.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno > 0
]]>
</select>
<insert id = "insert">
insert into tbl_board (bno,title,content,writer)
values (seq_board.nextval,#{title},#{content},#{writer})
</insert>
<insert id = "insertSelectKey">
<selectKey keyProperty = "bno" order = "BEFORE"
resultType = "long">
select seq_board.nextval from dual
</selectKey>
insert into tbl_board (bno,title,content,writer)
values (#{bno},#{title},#{content},#{writer})
</insert>
<select id = "read" resultType = "org.zerock.domain.BoardVO">
select * from tbl_board where bno = #{bno}
</select>
<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>
</mapper>
mapper.xml과 OracleDB가 제대로 연결되었는지 확인하기 위해서는 mapperTests 클래스가 필요하다. Tests클래스들은 src/test/java 밑에 만들어 준다.
package org.zerock.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 org.zerock.domain.BoardVO;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardMapperTests {
@Autowired
private BoardMapper mapper;
@Test
public void testGetList() {
mapper.getList().forEach(board -> log.info(board));
}
@Test
public void testInsert() {
BoardVO board = new BoardVO();
board.setTitle("새로 작성하는 글");
board.setContent("새로운 글 내용");
board.setWriter("신규 회원");
mapper.insert(board);
log.info(board);
}
@Test
public void testInsertSelectKey() {
BoardVO board = new BoardVO();
board.setTitle("새로 작성하는 글 select key");
board.setContent("새로 작성하는 내용 select key");
board.setWriter("newbie");
mapper.insertSelectKey(board);
log.info(board);
}
@Test
public void testRead() {
BoardVO board = mapper.read(4L);
log.info(board);
}
@Test
public void testDelete() {
log.info("DELETE COUNT : " + mapper.delete(3L));
}
@Test
public void testUpdate() {
BoardVO board = new BoardVO();
board.setBno(5L);
board.setTitle("수정된 제목");
board.setContent("수정된 내용");
board.setWriter("user00");
int count = mapper.update(board);
log.info("UPDATE COUNT : " + count);
}
}
데이터를 잘 넣고 JUnit 실행결과가 문제가 없다면 getList를 실행했을때, 다음과 같은 결과가 출력된다.
* 최근에 전자정부프레임워크로 개발할 일이 생겼다.
https://ivory-room.tistory.com/58
'개발 공부 > Spring' 카테고리의 다른 글
[spring] spring MVC - (3.View) (0) | 2023.04.17 |
---|---|
[spring] spring MVC - (2.Controller) (0) | 2023.04.17 |
[JSP] JSP , JSTL (0) | 2023.03.09 |
[JSP] JDBC (0) | 2023.03.01 |
[JSP] XML과 Annotation (0) | 2023.02.28 |