MyBatis ๋ฐ์ดํฐ ์ฝ์ ์ต์ ํ: List ์ฝ์ ์ ์ฑ๋ฅ ํฅ์ ๋ฐฉ๋ฒ (Mapper)
1๏ธโฃ interface
public interface UserMapper {
// List๋ก ํ ๋ฒ์ ๋ฃ๊ธฐ
void insertUsersList(@Param("users") List<User> users);
// vo๋ก ์ฌ๋ฌ๋ฒ ๋ฃ๊ธฐ
void insertUser(User user);
}
2๏ธโฃ 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.example.mapper.UserMapper">
<!-- Mapper ํ ๋ฒ ํธ์ถ -->
<insert id="insertUsersList">
INSERT INTO users (id, name, email)
VALUES
<foreach collection="users" item="user" separator=",">
(#{user.id}, #{user.name}, #{user.email})
</foreach>
</insert>
<!-- Mapper ์ฌ๋ฌ๋ฒ ํธ์ถ -->
<insert id="insertUser">
INSERT INTO users (id, name, email)
VALUES (#{id}, #{name}, #{email})
</insert>
</mapper>
3๏ธโฃ service
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
// Mapper ํ ๋ฒ ํธ์ถ
public void addUsers(List<User> users) {
userMapper.insertUsersList(users);
}
// java for๋ฌธ์ ์ด์ฉํ์ฌ Mapper ์ฌ๋ฌ ๋ฒ ํธ์ถ
public void addUsers(List<User> users) {
for (User user : users) {
userMapper.insertUser(user);
}
}
}
Mapper ์ฌ๋ฌ ๋ฒ ํธ์ถ vs. ํ ๋ฒ ํธ์ถํ์ฌ foreach ์ฌ์ฉ
Mapper ์ฌ๋ฌ ๋ฒ ํธ์ถ
๐๐ป ์ฅ์
- ๋จ์ํ ๊ตฌํ
- ๊ฐ๋ณ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๊ฐ๋ณ ์คํจ์ ๋ํ ์ฒ๋ฆฌ ์ฉ์ด
๐๐ป ๋จ์
- ์ฌ๋ฌ ๋ฒ์ ๋คํธ์ํฌ ํธ์ถ๋ก ์ธํด ์ฑ๋ฅ ์ ํ
- ์ฌ๋ฌ ํธ๋์ญ์ ์ผ๋ก ์ธํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ ์ฆ๊ฐ
- ์ฝ๋ ์ค๋ณต ์ฆ๊ฐ
Mapper ํ ๋ฒ ํธ์ถํ์ฌ foreach ์ฌ์ฉ
๐๐ป ์ฅ์
- ํ ๋ฒ์ ๋คํธ์ํฌ ํธ์ถ๋ก ์ฑ๋ฅ ์ต์ ํ
- ํ๋์ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ ๊ฐ์
- ์ฝ๋ ๊ฐ๊ฒฐํ
๐๐ป ๋จ์
- ํ๋์ ํธ๋์ญ์ ์์ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ํ๋ฏ๋ก ์ผ๋ถ ์คํจ ์ ์ ์ฒด ๋กค๋ฐฑ ํ์
- ๊ตฌํ ๋ณต์ก๋ ์ฆ๊ฐ ๊ฐ๋ฅ
์ ๋ฆฌ
- ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ ๋ฐฉ์์ ๊ตฌํ์ด ๋จ์ํ์ง๋ง ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์์ ์ํด๋ฅผ ๋ณผ ์ ์๋ค.
- ํ ๋ฒ ํธ์ถํ์ฌ foreach๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ด๊ธฐ ๊ตฌํ์ ๋ณต์กํ ์ ์์ง๋ง, ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์์ ๋ง์ ์ด์ ์ ์ ๊ณตํ๋ค.
→ ๊ทธ๋์ ๋๋ list ์ฝ์ ํด์ผ ํ ๋๋, mapper๋ฅผ ํ ๋ฒ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ ํ์ฌ ์ฌ์ฉํ๋ค.