์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- SQL ํ๋
- ์ฐ์ ์ฐ์ฐ์
- SpringSecurity ๋ก๊ทธ์์
- ๋ฐ๋ณต๋ฌธ
- ์ฐ์ฐ์
- @PreAuthorize("isAuthenticated()")
- SpringSecurity ๋ก๊ทธ์ธ
- SQLํ๋
- ์ดํด๋ฆฝ์ค ์ค์น
- ์๋ฐ์์ ์
- ๊ฐ์ฒด
- join
- ์คํ๋ง์ํ๋ฆฌํฐ ๋ก๊ทธ์์
- ์น์ ํ SQL
- ์๋ณ์
- ๊ฐ์ฒด์งํฅ
- ์ค๋ฒ๋ผ์ด๋ฉ
- StringBuffer
- ์ธํ ๋ฆฌ์ ์ด Web ์ ํ๋ฆฌ์ผ์ด์
- ํจ์
- ๋ฐฐ์ด
- ๋น๊ต ์ฐ์ฐ์
- ์์ฝ์ด
- ๋ ผ๋ฆฌ ์ฐ์ฐ์
- ์์
- SQL
- spring ๊ฒ์ํ ์ญ์
- java
- ์ค๋ฒ๋ก๋ฉ
- ์น์ ํ SQL ํ๋
- Today
- Total
gi_dor
MyBatis ๋ณธ๋ฌธ
๐ธ MyBatis
- ๊ฐ๋ฐ์๊ฐ ์์ฑํ SQL๋ฌธ ํน์ ์ ์ฅํ๋ก์์ ๊ฒฐ๊ณผ ๊ฐ์ ์๋ฐ ์ค๋ธ์ ํธ์ ์๋๋งคํํ๋ ์๋น์ค
- ์๋์ ์ธ JDBC ๋ฐฉ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์ฝ๋์๋ ๋ฌ๋ฆฌ ์ฟผ๋ฆฌ๊ฒฐ๊ณผ์ ์ค๋ธ์ ํธ ๊ฐ์ ์๋๋งคํ์ ์ง์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋์ ์ํ ์๋ฐ ORM ํ๋ ์์ํฌ (Object-Relational Mapping)
๐ป ๊ตฌ์ฑ์์
1. MapperConfig XML File : MyBatis ๋์์ ์ํ ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ ๊ณตํต์ผ๋ก ์ ์
2. Mapper XML File : ์คํํ SQL๋ฌธ ๋ฐ ๋งคํ์ ๋ณด๋ฅผ XML ๋ฐฉ์์ผ๋ก ์ ์
3. Mapper Annotations : ์๋ฐ ์ฝ๋ ๋ด์์ ์คํํ SQL๋ฌธ ๋ฐ ๋งคํ ์ ๋ณด๋ฅผ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด ์ ์
4. Parameter Object : SQL ๋ฌธ์ ์กฐ๊ฑด์ ์์ ๊ฐ์ ๋น๊ตํ๊ฑฐ๋ , INSERT , UPDATE ๋ฑ์ ํ์ํ ์ ๋ ฅ๊ฐ์ ๋ฐ์์ค๊ธฐ ์ํ ์ค๋ธ์ ํธ
5. Result Object : ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋ฆฌํดํ๊ธฐ ์ํ ์ค๋ธ์ ํธ
๐งฉ ์ฃผ์์์ฑ
โ id
โก parameterType
- SQL ๊ตฌ๋ฌธ์คํ์ ํ์ํ ๊ฐ์ ์ ๋ฌํ๋ ๊ฐ์ฒด์ ํจํค์ง ๊ฒฝ๋ก , ํด๋์ค๋ช ํน์ ๋ณ์นญ
- parameterType ์ผ๋ก ๊ฐ๋ฅํ ๊ฐ
- ๊ธฐ๋ณธ์๋ฃํ๊ณผ ๋ฌธ์์ด → SQL ๊ตฌ๋ฌธ์ ์นํํ ๊ฐ์ด ์ค์ง ํ๋๋ฐ์ ์๋๊ฒฝ์ฐ
- ์๋ฐ๋น์ฆ , Map → SQL ๊ตฌ๋ฌธ์ ์นํํ ๊ฐ์ด ์ฌ๋ฌ๊ฐ ์๋ ๊ฒฝ์ฐ
Map ์ ์ฌ์ฉํ ๊ฒฝ์ฐ parameterType="map"์ผ๋ก ์ค์ ํด์ ์ฌ์ฉํ๋ค
โข resultType
- ์กฐํ ๊ฒฐ๊ณผ ๊ฐ์ ์ ์ฅํ๋ ๊ฐ์ฒด์ ํจํค์ง ๊ฒฝ๋ก ๋ฐ ํด๋์ค๋ช ํน์ ๋ณ์นญ
- ์กฐํ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ๊ฐ์ ํ์ด์ด๋ ํ ํ์ ๋ํด์๋ง ๊ณ ๋ คํ๋ฉด ๋๋ค
- resultType ์ผ๋ก ๊ฐ๋ฅํ ๊ฐ
- ๊ธฐ๋ณธ ์๋ฃํ๊ณผ ๋ฌธ์์ด → ์ปฌ๋ผ์ ๊ฐฏ์๊ฐ 1๊ฐ ์ผ๋ , int , long , double , Date , string
- ์๋ฐ๋น์ฆ → ์ปฌ๋ผ์ ๊ฐฏ์๊ฐ ์ฌ๋ฌ๊ฐ ์ผ ๋ , ์กฐํ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ณ์ ์ด์ง ์์ ๋
- Map → ์ฌ๋ฌ ํ
์ด๋ธ์ ์กฐ์ธํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด์ผํ ๋
์กฐํ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ณ์ ์ผ ๋
ํ ์ด๋ธ ๋ณ๋ก ์๋ฐ๋น์ฆ ์ ์์์ด ๋ฐ์ดํฐ ๊ฐ์ ์กฐํํ๊ณ ์ ์ฅํ ๋
โฃ resultMap
- ์กฐํ๊ฒฐ๊ณผ์ ์ปฌ๋ผ๋ช
๊ณผ ์๋ฐ๋น์ฆ์ ๋ฉค๋ฒ๋ณ์๋ฅผ ๋งคํ์ํค๋ resultMap ์ ์ ์ํ๊ณ
resultMap์ ์ ์๋ resultMap์ ์์ด๋๋ฅผ ์ค์ ํ๋ค
๐ resultMap ์์๋ <association> ๊ณผ <collection> ํ๊ทธ๋ฅผ ์ฌ์ฉํด
๊ฐ์ฒด ํ์ ๋๋ ์ปฌ๋ ์ ํ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋งคํ ์ํฌ์ ์๋ค
๐น ์ฌ๋ฌ๊ฐ์ ํ๋ผ๋ฏธํฐ ๊ฐ ์ ๋ฌํ๊ธฐ
public interface BookMapper {
void insertBook(Book book) ;
List<Book> getBooksByPrice(@Param("min") int min , @Param("max") int max) ;
}
<insert id="insertBook" parameterType="vo.Book">
<select id="getBooksByPrice" resultType="vo.Book">
select *
from books
where
book_price between #{min} and #{max}
</select>
๐ ๋ณ๊ฒฝ์ฌํญ
IBatis์ Sql MapClient → SqlSession ๋ณ๊ฒฝ
- SqlSession ์ธํฐํ์ด์ค
- MyBatis๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ์ธํฐํ์ด์ค๋ก , SQL๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฉ์๋๋ฅผ ์ ๊ณต
- ์คํ ๋ฉ์๋ , ํธ๋์ญ์ ์ ์ด ๋ฉ์๋ ๋ฑ ํฌํจ
- SqlSessionFactory ํด๋์ค๋ฅผ ํตํด MyBatis Confiiiguration์ ๋ณด์ ํด๋น , SqlSession ์ธ์คํด์ค ์์ฑ
selectList()
selectOne()
insert()
update()
delete()
commit()
rollback()
- ์ด๋
ธํ
์ด์
๋ฐฉ์ ์ค์ ๋์
- MyBatis๋ ๋ณธ๋ XML ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ , MyBatis 3.X ๋ถํฐ ์ด๋ ธํ ์ด์ ๋ฐฉ์์ ์ค์ ์ ์ง์
- Mapper XML File ๋ด SQL๋ฌธ ๋ฐ ๋งคํ ์ ๋ณด๋ฅผ ์๋ฐ์ฝ๋ ๋ด์์ ์ด๋ ธํ ์ด์ ์ผ๋ก ๊ทธ๋๋ก ์ ์ฉ ๊ฐ๋ฅ
๐ IBatis ์ MyBatis
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋์ ์ํ ์๋ฐ ํ๋ ์์ํฌ
- IBatis โถ MyBatis ์ด๋ฆ ๋ณ๊ฒฝ
- IBatis์ ๋นํด ์กฐ๊ธ ๋ ๊ฐ๊ฒฐํ๊ณ ์ ์ฐํ XML ๊ตฌ์ฑ์ ์ ๊ณต
- MyBatis๋ ์๋๋งคํ ๊ธฐ๋ฅ์ ์ง์ํด ํธ๋ฆฌํ ๊ฐ์ฒด - ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งคํ์ ์ ๊ณต
- ๋์ ์ธ SQL ์์ฑ - <if> <choose> <when> <oterwise> ๋ฑ์ ๋์ SQL ํ๊ทธ๋ฅผ ์ฌ์ฉํด ๊ฐํธํ๊ฒ ์์ฑํ ์ ์๋ค
๐ฑ Maven pom.xml ์ถ๊ฐ ๋ฐฉ์
<!-- iBATIS pom.xml -->
<dependency>
<groupid>org.apache.ibatis</groupid>
<artifactid>ibatis-sqlmap</artifactid>
<version>2.3.4.726</version>
</dependency>
<!-- -->
<!-- MyBatis pom.xml -->
<dependency>
<groupid>org.mybatis</groupid>
<artifactid>mybatis</artifactid>
<version>3.4.5</version>
</dependency>
๐ง NameSpace
๊ธฐ์กด iBatis์์๋ <sqlMap namespace = "ibatisDAO">์ ๊ฐ์ด ์ฌ์ฉํ์์ง๋ง,
MyBatis์์๋ <mapper namespace = "com.gil.log.MybatisMapper">๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ๋์๋ค.
๐จ ์ฃผ์
์์ ์ ํ "null"๊ณผ(์) ์ฐ๊ด๋ "test" ์์ฑ์ ๊ฐ์๋ '<' ๋ฌธ์๊ฐ ํฌํจ๋์ง ์์์ผ ํ๋ค.
if ํ๊ทธ ์์ ">" ๊ดํธ๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ฏ๋ก ๋์ฒด์์ ์ฌ์ฉํด์ผ ํ๋ค.
< | lt; | <if test="paraName1 lt; 0"> |
> | gt; | <if test="paraName1 gt; 0"> |
<=, =< | lte; | <if test="paraName1 lte; 0"> |
>=, => | gte; | <if test="paraName1 gte; 0"> |
๐งฉ ๊ฐ๋ฐ์์
1. ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
2. myBatis ํ๊ฒฝ์ค์ ํ์ผ์ถ๊ฐ
3. Spring Bean Configuration ํ์ผ์ myBatis ๊ด๋ จ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ ์ด๋์ ๋น์ผ๋ก ๋ฑ๋ก
4. Mapper ์ธํฐํ์ด์ค ์ถ๊ฐ
public interface DepartmentMapper {
void insertDept(Dept dept);
void deleteDeptById(int id);
Dept getDeptById(int id);
List<Dept> getAllDepts();
}
<mapper namespace = "kr.co.jhta.dao.DepartmentMapper>
<insert id="insertDept" parameterType="kr.co.hjta.vo.Dept">
insert into departments
(dept_id , dept_name , manager_id , loc_id)
values
(#{id} , #{name} , #{managerId} , #{locID})
</inssert>
<delete id="deleteDeptById" parameterType="int">
delete from departments
where dept_id = #{value}
</delete>
<select id="getDeptByID" parameterType="int" resultType="kr.co.hjta.vo.Dept">
</select>
<select id="getAllDepts" resultType="kr.co.hjta.vo.Dept">
</select>
</mapper>
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ธ์ค ํ๊ธฐ
@Service
public class HrService {
@Autowired
private DeptMapper deptMapper;
}
๐ฎ MyBatis ๋์ ์ฟผ๋ฆฌ
MyBatis๋ <if> , <choose> ~ <when> ~ <otherwise> , <where> , <set> , <foreach> ํ๊ทธ๋ฅผ ์ฌ์ฉํด
๋์ SQL๋ฅผ ์์ฑํ ์ ์๋ค
- myBatis์์ ๋์ SQL ์์ฑ์ ์ง์ํ๊ธฐ ์ํด ์ ๊ณตํ๋ ํ๊ทธ๋ JSTL์ ํ๊ทธ์ ์ฌ์ฉ๋ฒ์ด ๋น์ทํ๋ค
<if>
<if test="์กฐ๊ฑด์">
SQL ๊ตฌ๋ฌธ
</if>
// ์ ์๋ ์กฐ๊ฑด์์ true / false ๋ก ํ์ ๋๋ ์กฐ๊ฑด์์ด๋ค
// ์ ์๋ ์กฐ๊ฑด์์ด true๋ก ํ์ ๋๋ฉด ํ๊ทธ ๋ด๋ถ์ SQL๊ตฌ๋ฌธ์ด ์ฌ์ฉ๋๋ค
<select id="getBooks" parameterType="dto.Criteria" resultType="vo.Book">
select *
from books
where book_status = 'sell'
<if test="title != null">
book_title = #{title}
</if>
</select>
getBooks() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ title ํ๋ผ๋ฏธํฐ๊ฐ null์ด ์๋๋ผ๋ฉด
book_title = #{ title } ์ด๋ผ๋ ์กฐ๊ฑด๋ฌธ์ด SQL ์ฟผ๋ฆฌ์ ์ถ๊ฐ๋๋ค
<choose> ~ <when> ~ <otehrwise>
์ฌ๋ฌ ์กฐ๊ฑด๋ฌธ ์ค ํ๋๋ฅผ ์ ํํด SQL ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ฒ ํด์ค๋ค
๋ด๋ถ์ <when>ํ๊ทธ๋ก ์กฐ๊ฑด์ ์ค์ ํ๋ฉฐ ๋ชจ๋ ์กฐ๊ฑด์ด false ์ผ ๊ฒฝ์ฐ ์ฌ์ฉํ
<otherwise> ํ๊ทธ๋ฅผ ์ ํ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ค.
<choose>
<when test ="์กฐ๊ฑด์1">
SQL ๊ตฌ๋ฌธ
</when>
<when test = "์กฐ๊ฑด์2>
SQL ๊ตฌ๋ฌธ
</when>
<when test = "์กฐ๊ฑด์3>
SQL ๊ตฌ๋ฌธ
</when>
<otherwise>
SQL ๊ตฌ๋ฌธ
<otherwise>
</choose>
// ์ ์๋ ์ฌ๋ฌ ์กฐ๊ฑด ์ค์์ ์กฐ๊ฑด์์ด true๋ก ํ์ ๋๋ SQL ๊ตฌ๋ฌธ์ด ์ฌ์ฉ๋๊ณ
// ์ ์๋ ๋ชจ๋ ์กฐ๊ฑด์์ด false๋ก ํ์ ๋๋ฉด otherwise์ SQL ๊ตฌ๋ฌธ์ ์ฌ์ฉ
<select id="getBooks" parameterType="dto.Criteria" resyltType="vo.Books">
select *
from books
where book_status = 'sell'
<choose>
<when test="title != null">
and book_title = #{title}
</when>
<when test="author != null" >
and book_publisher = #{publish}
</when>
</choose>
</select<>
<where>
ํ๊ทธ ๋ด๋ถ์ <if> <choose> ~ <when> ~ <otherwise> , <foreach> ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๋์ SQL ๊ตฌ๋ฌธ์ด ์์ด์ผํ๋ค
<where>
๋์ SQL๊ตฌ๋ฌธ
</where>
// <where> ํ๊ทธ๋ ๋ฐ๋์ <if> , <choose> , <otherwise> , <foreach> ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋
// ๋์ SQL ๊ตฌ๋ฌธ์ด ์์น ํด์ผํ๋ค
where ํค์๋ ์ถ๊ฐ
<select>
select *
from books
where book_status = 'sell'
<if test ="title != null">
and book_title = #{title}
</if>
</select>
// where ํ๊ทธ ์ฌ์ฉํ ํ์๊ฐ ์๋ค.
select * from books where book_status = 'sell'
๐ title์ ๊ฐ์ด null ์ด๋ฉด and book_title = #{title} ์ด ์ถ๊ฐ ๋์ง ์๋๋ค
<select>
select *
from book
where
<if test ="title != null">
and book_title = #{title}
</if>
</select>
// title ๊ฐ์ด null์ด๋ฉด ์คํ๋๋ SQL์ ์๋ ์ ๊ฐ๋ค
select * from books where
๐ title์ ๊ฐ์ด null ์ด๋ผ๋ฉด where ์ดํ ๋ฌธ์ฅ์ด ์์ด ์ค๋ฅ ๋ฐ์
<select>
select *
from books
<where>
<if test ="title != null">
and book_title = #{title}
</if>
</where>
</select>
// title ๊ฐ์ด null ์ด๋ฉด ์คํ๋๋ SQL
select * from books
// title ๊ฐ์ด null์ด ์๋๋ฉด ์คํ๋๋ SQL
select * from books where book_title = ?
๐ ์์ ๋ณด์ฌ์ค๊ฒ๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ์ <where> ํ๊ทธ๋ฅผ ์ฌ์ฉํด title์ ๊ฐ์ด null ์ผ ๋๋
- title ๊ฐ์ด null์ด ์๋ ๊ฒฝ์ฐ์๋ book_title = #{title} ์กฐ๊ฑด์ด ์ถ๊ฐ๋์ด ์คํ
- title ๊ฐ์ด null์ธ ๊ฒฝ์ฐ์๋ <if> ์กฐ๊ฑด๋ฌธ์ด ๋ฌด์๋๊ณ ์ ์ฒด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ณธ์ ์ธ ์ฟผ๋ฆฌ๊ฐ ์คํ
<where> ํ๊ทธ๋ฅผ ์ฌ์ฉํด ์กฐ๊ฑด์ ๋ฐ๋ผ SQL ์ฟผ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ์์ฑํ ์ ์๋ค.
<where> ํ๊ทธ๋ ์กฐ๊ฑด์ด ๋น์ด์์ ๋ WHERE ์ ์ ์์ฑํ์ง ์๊ณ ,
์กฐ๊ฑด์ด ์กด์ฌํ ๋๋ WHERE ์ ๊ณผ ์กฐ๊ฑด์ ํจ๊ป ์์ฑํ๋ค
and ํค์๋ ์ ๊ฑฐ
<where> ํ๊ทธ๋ ์ฟผ๋ฆฌ๋ฌธ์ where ํค์๋ ๋ฐ๋ก ๋ค์ ์ค๋ and ํค์๋๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค
<select>
select *
from books
where
<if test ="title != null">
book_title = #{title}
</if>
<if test = "author != null">
and book_autohr = #{author}
</if>
<iftest = "publisher != null">
and book_publisher = #{publisher}
</if>
</select>
title ์ด null
author ์ด๋ publisher๊ฐ null ์ด ์๋๋ผ๋ฉด
// title ์ด null , author ์ด๋ publisher๊ฐ null ์ด ์๋๋ฉด
select *
from books
where
and book_autohr = #{author}
// where ๋ค์์ and๊ฐ ์์ด์ ์ค๋ฅ ๋ฐ์
<where> ํ๊ทธ์ฌ์ฉ
<select>
select *
from books
<where>
<if test ="title != null">
book_title = #{title}
</if>
<if test = "author != null">
book_autohr = #{author}
</if>
<if test = "publisher != null">
book_publisher = #{publisher}
</if>
</where>
</select>
// <where> ํ๊ทธ๋ and๋ฅผ ์ ๊ฑฐํ๋ค
select * from books
where
book_author = #{author}
<where> ํ๊ทธ๋ก ์ธํด where ๋ค์ ์ค๋ and ํค์๋๊ฐ์ ๊ฑฐ๋๋ค
<SET>
<SET> ํ๊ทธ๋ ์ฟผ๋ฆฌ์์ ๋์ ์ผ๋ก SET ํค์๋๋ฅผ ์ถ๊ฐํ๊ณ , ํ์์๋ ์ฝค๋ง(,)๋ฅผ ์ ๊ฑฐํ๋ ์ญํ ์ ์ํํ๋ค
<update>
update books
<set>
<if test ="title != null">
book_title = #{title},
</if>
<if test ="author!= null">
book_author = #{author},
</if>
<if test ="price != null">
book_price = 0 " ,
</if>
<if test ="filename!= null">
book_filename = #{filename},
</if>
</set>
where book_no = #{no}
</update>
update books
set
book_title= #{title},
book_author = #{author},
book_price = #{price}
where
book_no = #{no}
EX
1. title์ด null์ด ์๋ ๊ฒฝ์ฐ์๋ book_title = #{title}์ SET ์ ์ ์ถ๊ฐํ๊ณ ,
2. author๊ฐ null์ด ์๋ ๊ฒฝ์ฐ์๋ author = #{author}์ SET ์ ์ ์ถ๊ฐํ๋ค
3.์ค์ ๋ SET ์ ์ ๋์ ์ผ๋ก ์์ฑ๋๋ฉฐ, null์ธ ์ปฌ๋ผ์ ์ ์ธ๋๋ค.
4. ์ฝค๋ง(,)๋ ๋์ ์ผ๋ก ์ฒ๋ฆฌ๋์ด ์ฝค๋ง๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์ ์ธ๋๋ค
<foreach>
<foreach> ํ๊ทธ๋ SQL ์ฟผ๋ฆฌ์์ ๋ฐ๋ณต ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ ํ๊ทธ๋ค
์ฃผ๋ก 'IN' ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ์ฝ๋ ์
์ ๋ํ ๋ฐ๋ณต ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์๋ค.
<foreach item="a" index="b" collection="productNumbers"
open="("separator="m" close=") nullable="true">
</foreach>
// ์ปฌ๋ ์
์ ๋ํ ๋ฐ๋ณต์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ ํ๊ทธ
// in ์ฐ์ฐ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค
<delete id="deleteProducts">
delete from products
where product_no
in
<foreach index="index" item ="num" collection="productNumber"
open="("separator=" , "close =")" >
#{num}
</delete>
delete
from products
where product_no
in (102,104,105)
- collection : ๋ฐ๋ณต๋์์ด ๋๋ ๊ฐ์ ๋ด๊ณ ์๋ ํ๋กํผํฐ๋ช ํน์ ํ๋ผ๋ฏธํฐ ์ง์
- item : collection์์ ์ง์ ํ ๋ฐฐ์ด ํน์ List์์ ์์๋๋ก ํ๋์ฉ ์ถ์ถ๋๋ ๊ฐ์ ๋ด์ ๋ณ์๋ช
- index : collection์์ ์ง์ ๋ ๋ฐฐ์ด ํน์ List๋ฅผ ๋ฐ๋ณต์ฒ๋ฆฌ ํ ๋ ๋ง๋ค 0๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค ๊ฐ์ ๋ด์ ๋ณ์๋ช ์ ์ง์ ํ๋ค ์ ์๋งํ๊ณ sql ๊ตฌ๋ฌธ์์๋ ์ฌ์ฉํ์ง ์๋๋ค
- open : <foreach> ํ๊ทธ๋ฅผ ๋ฐ๋ณต์ ์์ํ๊ธฐ์ ์ sql ๊ตฌ๋ฌธ์ ์ถ๋ ฅํ ์ปจํ ์ธ ๋ฅผ ์ง์ ํ๋ค
- close : <foreach> ํ๊ทธ๋ก ๋ฐ๋ณต์ด ์ข ๋ฃ๋์์ ๋ sql ๊ตฌ๋ฌธ์ ์ถ๋ ฅํ ์ปจํ ์ธ ๋ฅผ ์ง์ ํ๋ค
- separator : #{num}์ผ๋ก ๊ฐ์ ํ๋์ฉ ์ถ๋ ฅํ ๋๋ง๋ค ๊ฐ์ ๊ตฌ๋ถํ๋ ๊ตฌ๋ถ๋ฌธ์ ์ง์
'Back_End > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ioC , DI (1) | 2024.05.19 |
---|---|
Spring MVC , Controller (1) | 2024.03.12 |
Spring AOP (0) | 2024.03.12 |
๋น๋๋๊ตฌ Maven (0) | 2024.03.11 |
Spring Framework (0) | 2024.03.11 |