๐ปSpring ํ๋ก์ ํธ์์ MyBatis ์ฟผ๋ฆฌ๋ฌธ ์์ฑํ๊ธฐ
ํ์ผ ๊ตฌ์ฑ
ํจํค์ง๋ช (๊ฒฝ๋ก) | ํ์ผ๋ช |
com.test.controller | |
MyBatisController.java | |
com.test.persistence | |
MyBatisDAO.java | |
MyBatisDAOImpl.java | |
views | |
list.jsp | |
src/main/resources/mapper | |
mybatis.xml |
mybatis.xml์ ์๋ ๊ธ์์ ์ค๋ช ํ๋ MyBatis ํ๊ฒฝ์ค์ ์ mapperLocations์ผ๋ก ์ค์ ํด๋ ๊ฒฝ๋ก์ ์กด์ฌํด์ผํ๋ค.
์ฐธ์กฐ๊ธ:
https://steady-record.tistory.com/entry/Spring-MyBatis-์-Spring-์ฐ๋ํ๊ธฐ2-DBCP-์ฌ์ฉํ๊ธฐ
์ฟผ๋ฆฌ ์์ฑ ์ ์ฌ์ฉํ๋ ํ์ผ์ ์ญํ
1. Controller์์ DB ์์ ์ DAO์๊ฒ ์์ํ๋ค.
2. ๊ฐ์ฒด๊ฐ ๊ฒฐํฉ์ ์ํด interface๋ก ์ ์ธํ DAO์์๋ ๋ฉ์๋๋ช ๋ง ์ ์ธํ๋ค.
3. DAOImpl ํ์ผ์์๋ DAO์์ ์ ์ธํ ๋ฉ์๋์ mybatis.xml์์ ์์ฑํ ์ฟผ๋ฆฌ๋ฌธ์ ํธ์ถํ๋ ๋ฉ์๋๋ฅผ ์์ฑํ๋ค.
4. mybatis.xml ํ์ผ์์ ์ง์ ์ ์ธ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค.
๐ป์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ์ ์
๋ฐํ๊ฐ๊ณผ ๋งค๊ฐ๋ณ์ ์ ๋ฌด์ ๋ฐ๋ผ ์ฌ์ฉํ๋ ๋ฉ์๋๊ฐ ๋ค๋ฅด๋ค.
์ด์ Servlet์์ ์ฌ์ฉํ๋ excuteUpdate, excuteQuery ๋ฉ์๋๊ฐ insert, update, delete, selectOne, selectList ์ผ๋ก 5๊ฐ์ง๋ก ์ธ๋ถํ ๋์๋ค.
์ํฉ์ ๋ฐ๋ผ 5๊ฐ์ง ๋ฉ์๋ ์ค์์ ๊ณจ๋ผ ์ฌ์ฉํ๋ค.
- ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๋ ์๋ ์ฟผ๋ฆฌ
- ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ
- ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ
- ๋ฐํ๊ฐ์ด ๋จ์ผ๊ฐ์ผ ๋
- ๋ฐํ๊ฐ์ด ๋ ์ฝ๋ 1์ค์ผ ๋
- ๋ฐํ๊ฐ์ด ๋ ์ฝ๋ n์ค์ผ ๋
- ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ
- ๋ฐํ๊ฐ์ด ๋จ์ผ๊ฐ์ผ ๋
- ๋ฐํ๊ฐ์ด ๋ ์ฝ๋ 1์ค์ผ ๋
- ๋ฐํ๊ฐ์ด ๋ ์ฝ๋ n์ค์ผ ๋
1. ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๋ ์๋ ์ฟผ๋ฆฌ
๋ณํ์์ด ํญ์ ๋๊ฐ์ด ์คํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ ์ฟผ๋ฆฌ๋ผ๊ณ ํ๋ค.
Controller.java
@GetMapping(value="/m1.do")
public String m1() {
this.dao.m1();
return "list";
}
MyBatisDAO.java
public interface MyBatisDAO {
void m1();
}
MyBatisDAOImpl.java
@Override
public void m1() {
int result = this.template.update("mybatis.m1");
System.out.println("์ ์ฉ๋ ํ์ ๊ฐ์: " + result);
}
MyBatis์ SqlSessionTemplate์ ์ฌ์ฉํ์ฌ SQL ๋งคํ ํ์ผ์ ์ ์๋ "mybatis.m1"์ด๋ผ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค. mybaits ๋ ๋งคํ ํ์ผ์ namespace๋ฅผ ์๋ฏธํ๋ฉฐ m1์ ์ฟผ๋ฆฌ๋ฌธ์ id ๋ช ์ ์๋ฏธํ๋ค.
์คํ๊ฒฐ๊ณผ๋ก๋ ์ ์ฉ๋ ํ์ ๊ฐฏ์๋ฅผ ๋ฐํ(ํผ๋๋ฐฑ)ํ๋ค.
mybatis.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">
<mapper namespace="mybatis">
<update id="m1">
<!-- update tblMyBatis set age = age + 1; -->
update tblMyBatis set age = age + 1
</update>
</mapper>
id๋ช ์ ํด๋น sql๋ฌธ์ ์ฌ์ฉํ ๋ฉ์๋ ์ด๋ฆ์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๊ฒฐ๊ณผ
2. ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ(๋จ์ผ๊ฐ ๋งค๊ฐ๋ณ์)
Controller.java
@GetMapping(value="/m2.do")
public String m2(String seq, Model model) {
int result = this.dao.m2(seq);
model.addAttribute("result", result);
return "list";
}
๋งค๊ฐ๋ณ์ seq ์์ @RequestParam(name="seq") ์๋ต ๋์๋ค.
m2.do?seq=5 ์ ๊ฐ์ด ๋งค๊ฐ๋ณ์์ ํจ๊ป m2 ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
MyBatisDAO.java
int m2(String seq);
MyBatisDAOImpl.java
@Override
public int m2(String seq) {
return this.template.delete("mybatis.m2", seq);
}
mybatis.xml
<delete id="m2" parameterType="String">
delete from tblMyBatis where seq = #{seq}
</delete>
mybatis๋ ๋์ด์จ ๊ฐ์ #{key}๋ก ํํํ์ง๋ง ๋์ค์ JDBC์์ #{key}์์ ?๋ก ๋ฐ๋๋ค.
๋ฐ์ดํฐ๊ฐ ํ๋๋ง ๋์ด์๊ธฐ๋๋ฌธ์ ๋ฐ์ธ๋ฉ์ ์๋์ผ๋ก ํด์ค๋ค. ๋ฐ์ธ๋ฉ์ผ๋ก key๋ ์๋ฌด๊ฑฐ๋ ์จ๋ ์๊ด์ง๋ง ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ์ํด ์ปฌ๋ผ๋ช
๊ณผ ๋์ผํ๊ฒ ์ฌ์ฉํ๋ค.
๋ํ, ํ๋ผ๋ฏธํฐ๊ฐ ์์ ๋๋ parameterType๋ฅผ ๊ธฐ์ฌํ๋ ๊ฒ์ด ์ข์๋ฐ ํด๋์ค ์๋ฃํ์ ์ด๋์ ์์นํด์๋์ง ํจํค์ง๋ช ์ ๋ฐ๋์ ๊ธฐ์ฌํด์ผํ๋ค.
String ์ด ์ํ java.lang์ ์๋ฐ์์ ๊ธฐ๋ณธ์ ์ธ ํจํค์ง๋ก ์ ์ผํ๊ฒ ์๋ต๊ฐ๋ฅํ ํจํค์ง์ด๋ค.
๊ฒฐ๊ณผ
์๋ ์ฃผ์๋ก seq ๋ฐ์ดํฐ๋ฅผ ์ก์ ํ๋ฉด์ m2๋ฅผ ํธ์ถํ๋ค.
http://localhost:8090/mybatis/m2.do?seq=2
์ญ์ ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์๋ค๋ฉด์ ์์ ๋ ํ์ ๊ฐฏ์์ธ 1๋ฅผ ๋ฐํํ์๊ณ ,
mybatis ํ ์ด๋ธ์ select ํด๋ณด๋ฉด seq๊ฐ 2์ธ ํ์ด ์ญ์ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
3. ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ(๋ค์ค๊ฐ ๋งค๊ฐ๋ณ์)
Controller.java
@GetMapping(value="/m3.do")
public String m3(Model model) {
MyBatisDTO dto = new MyBatisDTO();
dto.setName("์์๊นก");
dto.setAge("26");
dto.setAddress("์์ธ์ ๊ฐ๋จ๊ตฌ");
dto.setGender("f");
int result = this.dao.m3(dto);
model.addAttribute("result", result);
return "list";
}
MyBatisDAO.java
int m3(MyBatisDTO dto);
MyBatisDAOImpl.java
@Override
public int m3(MyBatisDTO dto) {
return this.template.insert("mybatis.m3", dto);
}
๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋๋ ํ๋์ด๋, ์ฌ๋ฌ๊ฐ์ด๋ ์ธ์๊ฐ์ ํ๋๋ง ๋๊ธธ ์ ์๋ค. ๊ทธ๋์ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ ๋๊ธธ ๋๋ dto๋ก ํฌ์ฅํด์ ๋๊ธด๋ค.
mybatis.xml
<insert id="m3" parameterType="com.test.domain.MyBatisDTO">
insert into tblMyBatis (seq, name, age, address, gender) values (seqMyBatis.nextVal, #{name}, #{age}, #{address}, #{gender})
</insert>
ํ๋ผ๋ฏธํฐ ํ์ ์ด DTO์ธ ๊ฒฝ์ฐ ํจํค์ง๋ช ์ ๋ฐ๋์ ๊ธฐ์ฌํ๋ค.
๊ฒฐ๊ณผ
4. ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ(๋ค์ค๊ฐ ๋งค๊ฐ๋ณ์)
Controller.java
@GetMapping(value="/m4.do")
public String m4(Model model) {
HashMap<String, String>map = new HashMap<String, String>();
map.put("seq", "4");
map.put("address", "์์ธ์ ๊ฐ๋จ๊ตฌ ์ญ์ผ๋");
int result = this.dao.m4(map);
model.addAttribute("result", result);
return "list";
}
MyBatisDAO.java
int m4(HashMap<String, String> map);
MyBatisDAOImpl.java
@Override
public int m4(HashMap<String, String> map) {
return this.template.update("mybatis.m4", map);
}
mybatis.xml
<!-- <update id="m4" parameterType="java.util.HashMap"> -->
<update id="m4" parameterType="map">
update tblMyBatis set address = #{address} where seq = #{seq}
</update>
ํ๋ผ๋ฏธํฐ ํ์ ์ด HashMap์ผ ๋ ํจํค์ง๋ช ์ ํ๋ก ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ๊ณผ ์๋ตํ์ฌ map์ผ๋ก ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๊ฒฐ๊ณผ
5. ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ (๋ฐํ๊ฐ - ๋จ์ผ๊ฐ)
Controller.java
@GetMapping(value="/m5.do")
public String m5(Model model) {
int count = this.dao.m5();
model.addAttribute("count", count);
return "list";
}
MyBatisDAO.java
int m5();
MyBatisDAOImpl.java
@Override
public int m5() {
return this.template.selectOne("mybatis.m5");
}
selectOne ์คํํ ๊ฒฐ๊ณผ๊ฐ์ ๋ด๋ ๋งค๊ฐ๋ณ์์ ์๋ฃํ์ ๋ฐ๋ผ ๋ณํ๋ค.
String ๋ณ์์ ๋ด์ผ๋ฉด String์ผ๋ก ๋ฐํํ๊ณ , int ๋ณ์์ ๋ด์ผ๋ฉด int๋ก ๋ฐํํ๋ค.
์ด์ JDBC ๋ฐฉ๋ฒ๊ณผ ๋ฌ๋ฆฌ, resultset์ ๋ด์์ ์กฐํํ ํ์ ์์ด selectOne ํ๋์ ๋ฉ์๋๋ก ํด๊ฒฐํ ์ ์๋ค.
mybatis.xml
<select id="m5" resultType="Integer">
select count(*) from tblMyBatis
</select>
๋ฐํ๊ฐ์ด ์์ ๋๋ resultType์ผ๋ก ๋ฐํ๊ฐ์ ํ์์ ์ง์ ํ๋ค. Integer๋ java.lang ํจํค์ง์ ์ํ๋ฏ๋ก ์๋ต์ด ๊ฐ๋ฅํ๋ค.
๊ฒฐ๊ณผ
6. ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ (๋ฐํ๊ฐ - ๋ ์ฝ๋ 1์ค)
Controller.java
@GetMapping(value="/m6.do")
public String m6(String seq, Model model) {
MyBatisDTO dto = this.dao.m6(seq);
model.addAttribute("dto", dto);
return "list";
}
MyBatisDAO.java
MyBatisDTO m6(String seq);
MyBatisDAOImpl.java
@Override
public MyBatisDTO m6(String seq) {
return this.template.selectOne("mybatis.m6", seq);
}
mybatis.xml
<select id="m6" parameterType="String" resultType="com.test.domain.MyBatisDTO">
select * from tblMyBatis where seq = #{seq}
</select>
ํ 1์ค์ ๋ฐํ๋ฐ์ ๋๋ dto๋ก ๋ฐ๋๋ค.
์๋์ผ๋ก ์ปฌ๋ผ๋ช ๊ณผ ๋ณ์๋ฅผ ๋งคํํ๊ธฐ ์ํด์๋ ํ๊ทธ ๋ค์, ๋ฉค๋ฒ ๋ณ์ ์ด๋ฆ, ์ปฌ๋ผ๋ช 3๊ฐ์ง๊ฐ ๊ฐ์์ผ ํ๋ค.
๊ฒฐ๊ณผ
7. ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ (๋ฐํ๊ฐ - ๋ ์ฝ๋ n์ค, ์ปฌ๋ผ 1๊ฐ)
Controller.java
@GetMapping(value="/m7.do")
public String m7(Model model) {
List<String> names = this.dao.m7();
model.addAttribute("names", names);
return "list";
}
MyBatisDAO.java
List<String> m7();
MyBatisDAOImpl.java
@Override
public List<String> m7() {
/*
String sql = "";
stat = conn.createStatment();
rs = stat.excuteQuery(sql);
List<String> names = new ArrayList<String>();
while(rs.next()) {
names.add(rs.getString("name"));
}
return list;
*/
return this.template.selectList("mybatis.m7");
}
JDBC์์๋ ์กฐํํ ์ฟผ๋ฆฌ๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ์ด resultSet์ list๋ dto๋ก ์ฎ๊ฒจ๋ด์ ๋ฐํํ๋ค.
ํ์ง๋ง MyBatis์์๋ ๋ฒ๊ฑฐ๋ก์ด ์์ ์์ด ํ ์ค๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
mybatis.xml
<select id="m7" resultType="String">
select name from tblMyBatis
</select>
nํ์ ์กฐํํ ๋๋ resultType์๋ 1ํ์ ์๋ฃํ๋ง ๊ธฐ์ฌํ๋ค.
name๋ฅผ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ์ด๋ฆ ํ๋๋ ์๋ฃํ์ด String์ด๊ธฐ์ List<String>์ด ์๋ String์ผ๋ก ๊ธฐ์ฌํ๋ค.
๊ฒฐ๊ณผ
8. ๋ฐํ๊ฐ์ด ์๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ฟผ๋ฆฌ (๋ฐํ๊ฐ - ๋ ์ฝ๋ n์ค, ์ปฌ๋ผ n๊ฐ)
Controller.java
@GetMapping(value="/m8.do")
public String m8(Model model) {
List<String> list = this.dao.m8();
model.addAttribute("list", list);
return "list";
}
MyBatisDAO.java
List<String> m8();
MyBatisDAOImpl.java
@Override
public List<String> m8() {
/*
String sql = "";
stat = conn.createStatment();
rs = stat.excuteQuery(sql);
List<MyBatisDTO> names = new ArrayList<MyBatisDTO>();
while(rs.next()) {
MyBatisDTO dto = new MyBatisDTO();
dto.setSeq(rs.getString("seq"));
dto.setName(rs.getString("name"));
dto.setAge(rs.getString("age"));
list.add(dto);
}
return list;
*/
return this.template.selectList("mybatis.m8");
}
JDBC์์๋ ์กฐํํ ์ฟผ๋ฆฌ๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ์ด resultSet์ list๋ dto๋ก ์ฎ๊ฒจ๋ด์ ๋ฐํํ๋ค.
ํ์ง๋ง MyBatis์์๋ ๋ฒ๊ฑฐ๋ก์ด ์์ ์์ด ํ ์ค๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
mybatis.xml
<select id="m8" resultType="com.test.domain.MyBatisDTO">
select * from tblMyBatis
</select>
๊ฒฐ๊ณผ
9. ๋งค๊ฐ๋ณ์ ์๊ณ , ๋ฐํ๊ฐ๋ ์๋ ์ฟผ๋ฆฌ
๊ฒฝ์ฐ์ ๋ฐ๋ผ ์กฐํํ ํ ์ด๋ธ์ด ๋ค๋ฅธ๋ฐ ํ๋์ ๋ฉ์๋ ์์์ ํด๊ฒฐํ๊ณ ์ถ์ ๋, ์ฃผ์์ ํ ์ด๋ธ๋ช ๋ ํจ๊ป ๋๊ธด๋ค.
'm9.do?table=ํ ์ด๋ธ๋ช ' ์ ๊ฐ์ด ๋งค๊ฐ๋ณ์๋ก ํ ์ด๋ธ๋ช ์ ์ ๋ ฅ๋ฐ๊ณ ์ ๋ ฅํ ํ ์ด๋ธ๋ช ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์กฐํํ๋ค.
@GetMapping(value="/m9.do")
public String m9(Model model, String table) {
int count = this.dao.m9(table);
model.addAttribute("count", count);
return "list";
}
MyBatisDAO.java
int m9(String table);
MyBatisDAOImpl.java
@Override
public int m9(String table) {
return this.template.selectOne("mybatis.m9", table);
}
mybatis.xml
<select id="m9" parameterType="String" resultType="Integer">
select count(*) from ${table}
</select>
์๋ณ์ ๋ฐ์ธ๋ฉ
mybatis์์ #{key}๋ก ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํ๋ค. ํ์ง๋ง ์๋ฃํ์ ๋ฐ๋ผ ํ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๊ธฐ๋ ํ๋ค. #{key}์ parameterType="String"์ผ๋ก ๋๊ธฐ๋ฉด ์๋์ผ๋ก ์ฟผ๋ฆฌ๋ฌธ์ ๊ฝ๋ฐ์ดํ(')๋ฅผ ๋ถ์ธ๋ค.
๋ง์ฝ, ์๋ณ์๋ฅผ String์ผ๋ก ๋๊ธฐ๋ฉด ์ฟผ๋ฆฌ๋ฌธ์ ๊ฝ๋ฐ์ดํ๊ฐ ๋ถ์ด ์ํ๋๋๋ก ์กฐํ๋์ง์๋๋ค. ๊ทธ๋์ ์๋ณ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋๊ธฐ๊ณ ์ถ์ผ๋ฉด ์๋ณ์ ๋ฐ์ธ๋ฉ์ธ ${key}๋ก ํ๊ธฐํ๋ค.
๊ฒฐ๊ณผ
ํ ์ด๋ธ ๋ง๋ค ๋ ์ฝ๋ ์๊ฐ ์ ์ถ๋ ฅ๋๋ค.
10. ์ฟผ๋ฆฌ์ ๋น๊ต์ฐ์ฐ์ ์ฌ์ฉํ๊ธฐ
Controller.java
@GetMapping(value="/m10.do")
public String m10(Model model) {
int count = this.dao.m10();
model.addAttribute("count", count);
return "list";
}
MyBatisDAO.java
int m10();
MyBatisDAOImpl.java
@Override
public int m10() {
return this.template.selectOne("mybatis.m10");
}
mybatis.xml
<select id="m10" resultType="Integer">
<!-- select count(*) from tblMyBatis where age <= 25 --> <!-- ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค. -->
select count(*) from tblMyBatis
<![CDATA[
where age <= 25
]]>
</select>
CDATA ์น์
๋งํฌ์ ์ธ์ด์์๋ ๋น๊ต์ฐ์ฐ์(<, >)๋ ํ๊ทธ์ ๊บฝ์ ์ ๋ถ๋ณ์ ๋ชปํด ์ธ์์ ๋ชปํ๋ค.
๊ทธ๋์ ๋ฌธ์ ์ํฐํฐ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ด๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค.
์ด๋ด ๋ CDATA ์น์ ์ ์ฌ์ฉํ๋ค.
CDATA ์น์ ์ ์ฌ์ฉํ๋ฉด XML ํ์๊ฐ ํด๋น ๋ถ๋ถ์ ๋ฌธ์ ๋ฐ์ดํฐ๋ก ์ทจ๊ธํ๊ฒ ๋์ด, XML ์์ฝ ๋ฌธ์๋ ํน์ ๋ฌธ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
๊ฒฐ๊ณผ
25์ธ ์ดํ์ธ ์ฟผ๋ฆฌ์ ์๋ 2๊ฐ์ด๋ฏ๋ก ๋ ์ฝ๋ ์ 2๊ฐ๊ฐ ์ ์ถ๋ ฅ๋์๋ค.
11. ์ฃผ์ ๊ฒ์ (like ์ ์ฌ์ฉํ๊ธฐ)
Controller.java
@GetMapping(value="/m11.do")
public String m11(Model model, String word) {
//์ฃผ์ ๊ฒ์ (like ์ ์ฌ์ฉ)
List<MyBatisDTO> list = this.dao.m11(word);
model.addAttribute("list", list);
return "list";
}
MyBatisDAO.java
List<MyBatisDTO> m11(String word);
MyBatisDAOImpl.java
@Override
public List<MyBatisDTO> m11(String word) {
return this.template.selectList("mybatis.m11", word);
}
mybatis.xml
<select id="m11" parameterType="String" resultType="com.test.domain.MyBatisDTO">
select * from tblMyBatis where address like '%${word}%'
</select>
๊ฒฐ๊ณผ
12. ๋์ ์ฟผ๋ฆฌ(if ๋ฌธ)
m12.do?type=1 ์ผ๋๋ select first_name from employees;
m12.do?type=2 ์ผ ๋๋ select last_name from employees;
Controller.java
@GetMapping(value="/m12.do")
public String m12(Model model, String type) {
List<String> names = dao.m12(type);
model.addAttribute("names", names);
return "list";
}
MyBatisDAO.java
List<String> m12(String type);
MyBatisDAOImpl.java
@Override
public List<String> m12(String type) {
return this.template.selectList("mybatis.m12", type);
}
mybatis.xml
<select id="m12" parameterType="String" resultType="String">
<!--
<if test="type == 1">
select first_name from employees
</if>
<if test="type == 2">
select last_name from employees
</if>
-->
select
<if test="type == 1"> first_name</if>
<if test="type == 2"> last_name</if>
from employees
</select>
if ๋ฌธ์ ์ฌ์ฉํ์ฌ type ==1 ๋๋ type==2 ์ผ ๋ ํด๋น ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ฒ ํ๋ค.
13. ๋์ ์ฟผ๋ฆฌ(choose ๋ฌธ)
Controller.java
์ด๋ฆ ๊ฒ์ ์, m13.do?column=name&word=ํ๊ธธ๋
์ฃผ์ ๊ฒ์ ์, m13.do?column=address&word=์ญ์ผ
๋์ด ๊ฒ์ ์, m13.do?column=age&word=25
//๋์ ์ฟผ๋ฆฌ
@GetMapping(value="/m13.do")
public String m13(Model model, String column, String word) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("column", column);
map.put("word", word);
List<MyBatisDTO> list = this.dao.m13(map);
model.addAttribute("list", list);
return "list";
}
MyBatisDAO.java
List<MyBatisDTO> m13(HashMap<String, String> map);
MyBatisDAOImpl.java
@Override
public List<MyBatisDTO> m13(HashMap<String, String> map) {
return this.template.selectList("mybatis.m13", map);
}
mybatis.xml
<select id="m13" parameterType="map" resultType="com.test.domain.MyBatisDTO">
select * from tblMyBatis
<choose>
<when test="column == 'name'">
where name = #{word}
</when>
<when test="column == 'address'">
where address like '%' || #{word} || '%'
</when>
<otherwise>
<![CDATA[ where age <= #{word} ]]>
</otherwise>
</choose>
</select>
map์ key๋ฅผ ์ฌ์ฉํ ๋๋ #์ด๋ $๋ฅผ ๋ถ์ผ ํ์์์ด ๋ฐ๋ก ์ฌ์ฉํ๋ค.
๊ฒฐ๊ณผ
+) Error : Mapped Statements collection does not contain value for '๋งคํผ.๋ฉ์๋'
mapper์ id๋ฅผ ํ๋ฆฌ๊ฒ ๊ธฐ์ฌํ์์ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
DAOImpl.java ํ์ผ์ mapper๋ช , ๋งคํ xml ํ์ผ์ mpper namespace ๋ช ์ด ๋์ผํ์ง์ ๋ฉ์๋ ๋ช ์ด ๋์ผํ์ง ํ์ธํ๋ค.
mapper ๋ช ์ ๋์๋ฌธ์ ๊ตฌ๋ณ์ ํ๋ฏ๋ก ์ฃผ์ํ์ฌ ์์ฑํ๋ค.