3일차 목표
오늘은 파라미터를 VO 클래스(데이터 들만이 모여있는 클래스)에 보내고 출력해내거나
Bybatis를 통해서 DB와의 연결까지 시도해보록하자
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
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문을 통해서 데이터를 차례대로 출력할 것이다
테이블이 정상적으로 출력 된 모습을 볼 수 있다
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에 등록 된 것을 알 수 있다