Spring์ผ๋ก ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ MyBatis์ JPA๋ฅผ ๋ชจ๋ ์ ํ๊ฒ ๋๋ค. ์ฒ์์๋ โ๋ญ๊ฐ ๋ ์ข์ ๊ฑฐ์ง?โ, โ๋ด๊ฐ ์ธ์ ๋ญ ์จ์ผ ํ ๊น?โ ๊ฐ์ ๊ณ ๋ฏผ์ด ์๋ค.
์ฅ์
๋จ์
<!-- UserMapper.xml -->
<select id="findByUsername" resultType="User">
SELECT * FROM users WHERE username = #{username}
</select>
// UserMapper.java
User findByUsername(String username);
MyBatis๋ ์ด๋ฐ ๊ณณ์์ ์ ์ฉํ๋ฏ
์ฅ์
๋จ์
// UserRepository.java
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUsername(String username);
}
JPA๋ ์ด๋ฐ ๊ณณ์์ ์ ์ฉํ ๊ฒ ๊ฐ๋ค.
ํญ๋ชฉ | MyBatis | JPA |
---|---|---|
์ฟผ๋ฆฌ ๋ฐฉ์ | ์ง์ ์์ฑ | ์๋ ์์ฑ or JPQL |
ํ์ต ๋์ด๋ | ์ฌ์ด ํธ | ๊ฐ๋ ์ด ๋ง์ ์ด๋ ค์ |
์์ฐ์ฑ | ๋ฎ์ (์ฟผ๋ฆฌ ์ง์ ์์ฑ) | ๋์ (์๋ ์ฒ๋ฆฌ) |
๋ณต์กํ ์ฟผ๋ฆฌ | ๊ฐํจ | ์ ํ์ |
๊ฐ์ฒด์งํฅ ์ค๊ณ | ์ฝํจ | ๊ฐํจ |
์ ์ง๋ณด์ | ์ด๋ ต๊ฒ ๋๊ปด์ง ์ ์์ | ๊ตฌ์กฐํ๋์ด ํธํจ |
๊ฐ์ธ์ ์ผ๋ก CRUD ์์ฃผ์ ์๋น์ค๋ JPA,
๋ณต์กํ ํต๊ณ์ฑ ์ฟผ๋ฆฌ๋ ์ฑ๋ฅ์ด ์ค์ํ ๋ถ๋ถ์ MyBatis๋ก ๋๋ ์ ์ฐ๋๊ฒ ์ข์๋ค.
๋ ์ค ํ๋๋ง ๊ณ ์งํ ํ์๋ ์๊ณ , ์ํฉ์ ๋ฐ๋ผ ์ ํํ๊ฑฐ๋ ํผํฉํด์ ์ฌ์ฉํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์๋ค.
resources/mapper/
๊ฐ์ ๊ฒฝ๋ก์ XML ํ์ผ์ ๋ง๋ค๊ณ , SQL์ <select>
, <insert>
๋ฑ์ผ๋ก ์์ฑํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ธํฐํ์ด์ค ํ์ผ์์ XML์ id
๊ฐ๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ฉด ๋๋ค.
<!-- UserMapper.xml -->
<select id="findByUsername" resultType="User">
SELECT * FROM users WHERE username = #{username}
</select>
// UserMapper.java
@Mapper
public interface UserMapper {
User findByUsername(String username);
}
์ด๋ ๊ฒ ๋งคํํ๋ฉด UserMapper์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ XML ์์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ค.
SQL์ ๋ด๊ฐ ๋ค ์ง์ผ ํ๊ธด ํ์ง๋ง, ๊ทธ๋งํผ ์ปจํธ๋กค๋ ํ์คํ ๊ฐ๋ฅํ๋ค.
๋ณต์กํ ์กฐ๊ฑด์ด ํ์ํ ์ฟผ๋ฆฌ๋ ์ฑ๋ฅ ํ๋์ด ํ์ํ ๋ ์ง์ ๊ฑด๋๋ฆด ์ ์๋ค๋ ์ ์ด ๊ฝค ํฐ ์ฅ์ ์ด๋ค.
Spring Data JPA์์ ์ ๊ณตํ๋ JpaRepository๋ฅผ ์์๋ฐ์ผ๋ฉด
๋ณ๋ค๋ฅธ ์ค์ ์์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋ค.
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUsername(String username);
}
๋ฉ์๋ ์ด๋ฆ๋ง ์ง์ด๋ ๋ด๋ถ์ ์ผ๋ก ์ฟผ๋ฆฌ๊ฐ ์์ฑ๋ผ์ ์คํ๋๋ค.
๋ง์ฝ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ํ์ํ๋ค๋ฉด @Query ์ด๋
ธํ
์ด์
์ ์จ์ JPQL์ ์ง์ ์์ฑํ ์๋ ์๋ค.
์ฝ๋๋ฅผ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ์์ฑํ ์ ์๋ค๋ ๊ฒ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๊ณ ,
์ค๊ณ๊ฐ ์ ๋์ด ์๋ค๋ฉด ์ ์ง๋ณด์๋ ํ์ฅ๋ ์์ํ๊ฒ ํ ์ ์๋ค.
์ด๋ ๊ฒ ๋์ ๋ฐฉ์๊น์ง ์ดํด๋ณด๋,
JPA๋ ํธ๋ฆฌํจ๊ณผ ๊ตฌ์กฐ์ ์ธ ์ค๊ณ๋ฅผ ์งํฅํ๊ณ ,
MyBatis๋ ์ฟผ๋ฆฌ ์ ์ด์ ์ ์ฐํจ๊ณผ ์ฑ๋ฅ ์ค์ฌ์ ์ค๊ณ์ ๊ฐ๊น๋ค๋ ๊ฒ ํ์คํ ๋ณด์ธ๋ค.
๋ ๋ค ์ฅ๋จ์ ์ด ํ์คํด์ ํ๋ก์ ํธ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ๊ณ ๋ฅด๋ ๊ฒ ์ค์ํ ๊ฒ ๊ฐ๋ค.