[Database] MyBatis Xml
1. Mapper 만들기
앞에서 MyBatic java에서 propertice를 설정하는 것까지 동일하다. 다른 점은 Mapper 파일 만드는 시점부터 달라진다. WEB-INF 폴더에 새폴더를 생성한다. mapper 이름으로 폴더를 생성하고 폴더를 오른쪽 클릭한다음 New->File을 클릭하고 mapper.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">
그런다음 properties 파일에 작성한 데이터를 xml에서 사용할 수 있게 Bean을 정의해야한다. servlet-context.xml 파일에서 설정을 해주도록 한다.
<!-- properties 파일의 내용을 사용할 수 있도록 Bean을 정의한다. -->
<beans:bean class='org.springframework.web.beans.factory.config.PropertyPlaceholderConfigurer'>
<beans:property name="location">
<beans:value>/WEB-INF/properties/db.properties</beans:value>
</beans:property>
</beans:bean>
같은 파일 안에 밑에 BasicDataSource Bean 정의도 같이 넣어준다.
<beans:bean class='org.apache.commons.dbcp2.BasicDataSource' id = 'basic_data_source'>
<beans:property name='diverClassName' value='${db.classname}'/>
<beans:property name="url" value="${db.url}"/>
<beans:property name="username" value='${db.username}'/>
<beans:property name="password" value='${db.password}'/>
</beans:bean>
SqlSessionFactoryBean Bean 정의도 같은 파일 안에서 계속 이어 써준다.
<beans:bean class='org.mybatis.spring.SqlSessionFactoryBean' id='sqlSession'>
<beans:property name="dataSource" ref='basic_data_source'/>
<beans:property name="mapperLocations" value='/WEB-INF/mapper/*.xml'/>
</beans:bean>
마지막으로 쿼리문을 전달해주는 SqlSessionTemplate 정의도 같이 추가해준다.
<beans:bean class='org.mybatis.spring.SqlSessionTemplate' id='sqlSessionTemplate'>
<beans:constructor-arg index='0' ref='sqlSession'/>
</beans:bean>
이제 준비작업은 끝났다.
2. 실행
이제 views 폴더에 index.jsp 파일로 가서 <body>태그 안에 저번처럼 데이터를 입력하고 읽는 링크 태그를 입력한다.
<a href='input_data'>input_data</a><br/>
<a href='read_data'>read_data</a><br/>
그리고 빈을 만들어준다. 저번과 똑같이 src폴더에 오른쪽 클릭하고 패키지 kr.co.softcampus.beans를 만들어준다. 그리고 DataBean.java를 만들어 data1, data2, data3를 지정하고 getter와 setter를 만들어준다.
package kr.co.softcampus.beans;
public class DataBean {
private String data1;
private String data2;
private String data3;
public String getData1() {
return data1;
}
public void setData1(String data1) {
this.data1 = data1;
}
public String getData2() {
return data2;
}
public void setData2(String data2) {
this.data2 = data2;
}
public String getData3() {
return data3;
}
public void setData3(String data3) {
this.data3 = data3;
}
}
마찬가지로 저번처럼 kr.co.softcampus.controller에 TestController도 만들어준다. 그리고 getMapping하는 메소드도 입력한다.
@Controller
public class TestController {
@GetMapping("/input_data")
public String input_data(){
return "input_data";
}
input_data 이름의 jsp도 views에 만들어준다.
<body>
<form action='input_pro' method='post'>
data1 : <input type='text' name='data1'/><br/>
data2 : <input type='text' name='data2'/><br/>
data3 : <input type='text' name='data3'/><br/>
<button type='submit'>확인</button>
</form>
</body>
다시 TestController에 가서 PostMapping 하는 메소드 이름만 만든다.
@PostMapping("/input_pro")
public String input_pro(DataBean dataBean){
}
여기서 이전과 다른 지점이 나타난다. mapper를 작성하러 mapper.xml로 가자.
<mapper namespace="G00D_DB">
<insert id="insert_data" parameterType="kr.co.softcampus.beans.DataBean">
<![CDATA[
insert into spring_mvc_tabe (data1, data2, data3)
values (#{data1}, #{data2}, #{data3})
]]>
</insert>
</mapper>
다시 Controller로 간다. 이전에 MapperInterface mapper1를 주입한것과 달리 이번에는 SqlSessionTemplate을 주입한다.
@Controller
public class TestController {
@Autowired
SqlSessionTemplate SqlSessionTemplate;
@GetMapping("/input_data")
public String input_data(){
return "input_data";
}
@PostMapping("/input_pro")
public String input_pro(DataBean dataBean){
SqlSessionTemplate.insert("G00D_DB.insert_data", dataBean);
return "input_pro";
}
이에 맞춰 input_pro.jsp 파일을 views 폴더에 생성해준다. 그리고 간단하게 저장완료 상태 표시하는 태그만 써준다.
<body>
<h1>저장완료</h1>
</body>
이제 입력하는 부분은 다 했고, 데이터를 가져오는 부분을 만들어보자. mapper.xml 파일에 가서 </insert> 태그 밑에 다음과 같이 select 문을 작성한다. 값을 반환하는 것이기 때문에 parameterType이 아닌 resultType이다.
<select id = 'select_data' resultType="kr.co.softcampus.beans.DataBean">
<![CDATA[
select data1, data2, data3 from spring_mvc_table
]]>
</select>
그런다음 Controller로 가서 select문 데이터를 가져오는 메소드를 추가해준다.
@GetMapping("/read_data")
public String read_data(Model model) {
List<DataBean> list = SqlSessionTemplate.selectList("G00D_DB.select_data");
model.addAttribute("list", list);
return "read_data";
}
return 값인 read_data.jsp 파일을 views에 만들어준다. 마찬가지로 상단에 jstl을 사용하기 위한 태그를 추가해준다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
그리고 데이터를 표시하기 위한 c:forEach 태그를 추가해준다.
<body>
<c:forEach var='obj' items="${list}">
${obj.data1 }, ${obj.data2 }, ${boj.data3 }<br/>
</c:forEach>
</body>
서버를 실행해서 잘 돌아가는지 확인해보자