MyBatisSimple Project๐
MyBatis ์ ์ฉ ๋ฐฉ๋ฒ์๋ ๋๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
1. XML Mapper ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์
2. Interface Mapper๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์
Interface Mapper๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด XML Mapper๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์๋ณด๋ค ๊ฐ๋จํ์ฌ ๋ ์ถ์ฒํ๋ค.
โปXML Mapper๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์๋ ๊ธ์ ์ฐธ๊ณ ํ๋ค.
- ํ์ผ ๊ตฌ์ฑ
ํจํค์ง(๊ฒฝ๋ก) | ํ์ ํจํค์ง(๊ฒฝ๋ก) | ํ์ผ๋ช |
src/test/java | com.test.persistence | MapperTest.java |
src/main/java | com.test.mapper | TestMapper.java(I) |
src/main/resources | com > test > mapper | TestMapper.xml |
mapper.xml ํ์ผ ๋ง๋ค ๋๋ ํด๋ ์์ฑ์ ์ฃผ์ํด์ผ ํ๋ค.
๋ค๋ฅธ ํจํค์ง์ ๋ค๋ฅด๊ฒ com, test, mapper ์์ผ๋ก ์์ฐจ์ ์ผ๋ก ํด๋๋ฅผ ์์ฑํ๋ค.
- ํ๊ฒฝ์ค์
1. ๊ธฐ์ด ํ๊ฒฝ
https://steady-record.tistory.com/entry/Spring-์คํ๋ง-ํ๋ก์ ํธ-์ค์ -์ผ๊ด-์ ์ฉ
2. root-context.xml ์์
mybatis-spring ํ๊ทธ ์ค์
Namespaces ํญ์์ mybatis-spring ์ฒดํฌ ํ ์ ์ฅ
์ธํฐํ์ด์ค ๋งคํผ๋ฅผ ์ธ์ํ๋ ์ฝ๋ ํ ์ค์ ์ถ๊ฐํ๋ค.
<mybatis-spring:scan base-package="com.test.mapper"/>
- Mapper ์ธํฐํ์ด์ค ๋ง๋ค๊ธฐ
src/main/java์ com.test.mapper ํจํค์ง ์์ฑ ํ TestMapper interface ํ์ผ์ ์์ฑํ๋ค.
Interface Mapper ๋ฐฉ์์์๋ TestMapper interface ํ์ผ์ด SQL ์คํํ๋ ๋ด๋น์๊ฐ ๋๋ค.
์ด์ XML Mapper ๋ฐฉ์ ๋ ์ฌ์ฉํ๋ SqlSessionTemplate ์ฌ์ฉํ์ง ์๊ณ TestMapper interface๊ฐ ๋์ ๋ด๋นํ๋ ๊ฒ์ด๋ค.
TestMapper.java
package com.test.mapper;
import org.apache.ibatis.annotations.Select;
//์ธํฐํ์ด์ค ๋งคํผ
public interface TestMapper {
@Select("select count(*) from tblAddress")
String getTime();
}
์ถ์๋ฉ์๋ ์์ @Select, @Insert, @Update ๋ฑ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค.
์ด๋ ธํ ์ด์ ๋ฐฉ์์ ์ฅ์ ์ ํธ๋ฆฌํ๋ค๋ ๊ฒ์ด๋ค.
SQL ์ฟผ๋ฆฌ๊ฐ Java ์ฝ๋ ๋ด์ ์ธํฐํ์ด์ค ๋ฉ์๋๋ก ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์, ์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ข๋ค. ๋ํ, SQL ์ฟผ๋ฆฌ๊ฐ ์ฝ๋์ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ด ๊ฐ๋ฐ์๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
ํ์ง๋ง, SQL ๋ฅผ ๋ฌธ์์ด๋ก ํํํ๋ฏ๋ก ๋์ ์ฟผ๋ฆฌ๋ฅผ ํํํ ๋๋ ์๋์ ์ผ๋ก ์ด๋ ต๋ค. ๊ทธ๋ฆฌ๊ณ ์ํฐ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
์ด๋ฐ ๋จ์ ์ ํด์ํ๊ธฐ ์ํด XML ํ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค.
- ์ฟผ๋ฆฌ ๋ถ๋ฆฌ
์ด๋ ธํ ์ด์ ์ ๊ธฐ์ฌํ ์ฟผ๋ฆฌ๋ฅผ xml ํ์ผ๋ก ๋ถ๋ฆฌํ ์ ์๋ค.
XML ์์นํ ํด๋๋ ๋ฐ๋์ ์ธํฐํ์ด์ค ๋งคํผ๊ฐ ๋ค์ด์๋ ํจํค์ง์ ๊ตฌ์กฐ๊ฐ ๋์ผํด์ผํ๋ค.
์ธํฐํ์ด์ค ๋งคํผ์ ํจํค์ง๋ com.test.mapper์ผ๋ก XML ํ์ผ์ ์๋์ ๊ฐ์ด ์์ฑํ๋ค.
src/main/resources ํจํค์ง ํ์,
com ํด๋ > test ํด๋ > mapper ํด๋ > TestMapper.xml ํ์ผ
์ด๋ ธํ ์ด์ ์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ก ์ง์ ํ์ง ์์๋ ์ธํฐํ์ด์ค ๋งคํผ๊ฐ XML ์์น๋ฅผ ์ธ์ํ ์ ์๊ฒ ๋๋ค.
TestMapper.java
public interface TestMapper {
@Select("select count(*) from tblAddress")
String getTime();
String getTime2();
}
String getTime2();
์ด๋ ธํ ์ด์ ์์ด ์ถ์๋ฉ์๋๋ง ์์ฑํ๋ค.
TestMapper.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="com.test.mapper.TestMapper">
<select id="getTime2" resultType="String">
select sysdate from dual
</select>
</mapper>
namespace์๋ ํธ์ถํ ์ธํฐํ์ด์ค ๊ฒฝ๋ก๋ฅผ ์ ์ด ์ฐ๋์ ์์ผ์ค๋ค.
๊ทธ๋ฆฌ๊ณ , id์๋ ์ถ์๋ฉ์๋์ ์ด๋ฆ์ ์ ๋๋ค.
Interface Mapper ๋ฐฉ์์ผ๋ก๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์๋ 2๊ฐ์ง๊ฐ ์๋ค.
1. ์ด๋ ธํ ์ด์
2. XML ํ์ผ ๋ถ๋ฆฌ
๋ณดํต, ๊ฐ๋จํ ์ฟผ๋ฆฌ๋ ์ด๋ ธํ ์ด์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๊ณ ๋ณต์กํ ์ฟผ๋ฆฌ๋ xml ํ์ผ์ ์ ์ด ํผ์ฉํ์ฌ ์ฌ์ฉํ๋ค.
์ฃผ์๋ก ๋ฐ์ดํฐ ์ ๊ทผํ๊ธฐ๐
interface Mapper ๋ฐฉ์์ผ๋ก ์ฃผ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ค.
- ํ์ผ ๊ตฌ์ฑ
ํจํค์ง(๊ฒฝ๋ก) | ํ์ ํจํค์ง(๊ฒฝ๋ก) | ํ์ผ๋ช |
src/main/java | com.test.controller | AddressController.java |
com.test.domain | AddressDTO.java | |
com.test.mapper | AddressMappper.java(I) | |
src/main/resources | com > test > mapper | AddressMapper.xml |
WEB-INF | views | list.jsp |
- ์ ์ฒด ์ฃผ์๋ก ์กฐํํ๊ธฐ
AddressController.java
@Controller
public class AddressController {
@Autowired
private AddressMapper mapper;
@GetMapping(value = "/list.do")
public String list(Model model) {
model.addAttribute("list", mapper.list());
return "list";
}
}
AddressMapper.java
public interface AddressMapper {
@Select("select * from tblAddress")
List<AddressDTO> list();
}
์ด๋ ธํ ์ด์ ๋ฐฉ์์ผ๋ก ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค.
๊ฒฐ๊ณผ ํ์ด์ง
- ํน์ ํ์ ๊ฒ์ํ๊ธฐ
AddressController.java
@Controller
public class AddressController {
@Autowired
private AddressMapper mapper;
@GetMapping(value = "/list.do")
public String list(Model model) {
model.addAttribute("dto", mapper.get());
return "list";
}
}
AddressMapper.java
public interface AddressMapper {
AddressDTO get();
}
AddressMapper.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="com.test.mapper.AddressMapper">
<select id="get" resultType="com.test.domain.AddressDTO">
select * from tblAddress where seq = 22
</select>
</mapper>
๊ฒฐ๊ณผ ํ์ด์ง
๐ขorg.xml.sax.SAXParseException
์๋ฌ๋ xml์์ ๋ฌธ์ ๊ฐ ์๊ฒจ ๋ฐ์ํ๋ ์๋ฌ์ด๋ค.
namespace๋ ์ ์์ฑ๋๋์ง, id๋ ํ๋ฆฌ์ง์์๋์ง xmlํ์ผ์ ์ ์ดํด๋ณด๋๋กํ๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] WebSocket์ผ๋ก ์ค์๊ฐ ์ฑํ ๊ตฌํํ๊ธฐ (0) | 2023.12.05 |
---|---|
[Spring] WebSocket ๊ธฐ์ด ์์ (0) | 2023.12.01 |
[Spring] REST API Sever ๊ตฌ์ถ (0) | 2023.11.30 |
[Spring] JUnit๋ฅผ ์ด์ฉํ ๋จ์ํ ์คํธ(JDBC, HikariCP, MyBatis) (0) | 2023.11.30 |
[Spring] Spring AOP : @Aspect ์ฌ์ฉํ๊ธฐ (0) | 2023.11.29 |