포트폴리오 3일차

김상복·2022년 5월 24일
0

포트폴리오

목록 보기
3/8

3일차 목표

오늘은 파라미터를 VO 클래스(데이터 들만이 모여있는 클래스)에 보내고 출력해내거나
Bybatis를 통해서 DB와의 연결까지 시도해보록하자


Mybatis 연결

1. Mybatis 설정(root-context)

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
</bean>
<mybatis-spring:scan base-package="com.bok.mapper"/>

root-context에 해당 설정을 추가
위의 sqlsession으로 mybatis를 datasource 즉, 데이터베이스와 연결해서 사용할 것이다

2. Mybatis xml 폴더 및 파일 설정

root-context에서 조회하라고 설정해놓은 폴더를 생성한다
단, 폴더를 [ . ] 에 맞게 하나 하나 따로따로 설정하지 않으면 조회되지 않으니 반드시 주의가 필요하다.
그리고 난 뒤 폴더 안에 Mybatis를 사용할 xml을 추가한다

3. Mapper.xml 설정 추가

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

라는 설정이 가장 상단에 추가되어야만한다

5. xml 내부 확인

	<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="com.bok.mapper.BoardMapper">

	<select id="getList" resultType="com.bok.domain.BoardVO">
		select * from test_board order by bno desc
	</select>
	
	<insert id="insertProc">
		insert into test_board values(SEQ_TEST.nextval,#{title},#{content}, #{writer})
	</insert>
</mapper>

mapper : 해당 태그 안의 내용을 조회한다는 의미정도로 해석됌

name space : com.bok.mapper 라는 패키지 안의 boardMapper에서 해당 클래스를 조회

위 사진과 같이 namespace의 클래스를 java 폴더에서 찾게 됨

mybatis 조회 문 : select, insert 등 오라클 DB에서 사용되는 문구를 사용할 수 있음

id : BoardMapperr 클래스 안의 id 값과 같은 이름의 메소드를 찾아서 해당 메소드가 실행 될 때 해당 Mybatis로 조회해서 결과를 반환함

resultType : id에 해당하는 메소드의 반환형에 맞게 타입을 설정해줘야함

[resultType에 대한 설명]
https://java119.tistory.com/45


List 조회

1. Service에 실행 시킬 인터페이스 생성

List<BoardVO> getList();

2. Mapper에 Mybatis 등록

<select id="getList" resultType="com.bok.domain.BoardVO">
		select * from test_board order by bno desc
</select>

3. Controller 설정

@GetMapping("/list")
public String list(Model model) {
	
	System.out.println("list Start");
	
	model.addAttribute("list",service.getList());
	
	return "/board/list";
}	

코드에서 보면 알겠지만 service.getList()에서 나오는 데이터들은 BoardVO에 저장되고 해당 BoardVO를 객체화 하여 List에 저장하게 된다. 그리고 그 데이터를 "list"라는 변수명에 저장하여 사용할 수 있게 model에 저장한다

4. jsp 파일 설정

<table border="1px">
	<tr>
		<td>bno</td>
		<td>작성자</td>
		<td>제목</td>
		<td>내용</td>
	</tr>
	<c:forEach var="value" items= "${list }">
		<tr>
		<td>${value.bno }</td>
		<td>${value.writer }</td>
		<td>${value.title }</td>
		<td>${value.content }</td>
	</tr>		
	</c:forEach>
</table>

<c:forEach>의 경우 java의 반복문과 동일하다
items는 어떠한 데이터를 처음부터 끝까지 출력할껀지를 정하는 것이고
var은 items에서 나오는 데이터를 저장할 변수이다

우리는 list라는 변수에 BoardVO 데이터를 저장해놨고 해당 List의 데이터를 var이라는 변수에 넣어 둔 상태이다

그렇다면 내가 참고해야할 점은 VO 클래시앋

@Data
public class BoardVO {

private int bno;
private String title;
private String content;
private String writer;

}

VO 클래스에 @Data라는 롬북의 어노테이션을 적용해두어서 Getter, Setter, ToString이 자동으로 생성 된 상태이고
${ } 즉, TL을 사용하면 Getter를 통해서 해당 데이터를 불러올 수 있고 foreach문을 통해서 데이터를 차례대로 출력할 것이다

테이블이 정상적으로 출력 된 모습을 볼 수 있다


insert 데이터 추가

1. jsp파일로 데이터 전송

	<form action="/board/insertProc" method="post">
        <h3>작성자</h3>
        <input type="text" name="writer"/><br>
        <h3>제목</h3>
        <input type="text"  name="title"/><br>
        <h3>내용</h3><br>
        <textarea rows="5" cols="20" name="content"></textarea>
        <br>
        <input type="submit" value="전송">
        <input type="reset" value="초기화">	
	</form>

writer, title, content의 데이터를 insertProc로 전송

2. Controller

    @PostMapping("/insertProc")
    public String insertProc(BoardVO vo) {

        System.out.println("insertProc");

        service.insertProc(vo);

        return "redirect:/board/list";
    }

해당 데이터를 BoardVO에 담아서 insertProc를 실행

. Service에 해당 메소드 등록

   	void insertProc(BoardVO vo);

. Mapper에 Mybatis 설정

   <insert id="insertProc">
		insert into test_board values(SEQ_TEST.nextval,#{title},#{content}, 			#{writer})
	</insert>
	

${ }를 통해서 저장 된 데이터를 사용할 수 있다
그리고 mybatis에는 절대로 [ ; ] /세미콜론 을 사용하지 않는다

이렇게 하면 해당 데이터가 정상적으로 DB에 등록 된 것을 알 수 있다

	
profile
초보 개발자

0개의 댓글