๐ MyBatis์ JPA ์ฐจ์ด
MyBatis์ JPA๋ ๋ ๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ ์ํธ์์ฉ์ ์ํด ์ฌ์ฉ๋๋ Java ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ์ ์ด์ง๋ง, ๊ฐ๊ฐ์ ๋์ ๋ฐฉ์๊ณผ ํน์ง์ ๋ค๋ฆ
๋๋ค.
โ๏ธ 1. ๊ฐ๋
โ๏ธ 2. ์ฝ๋ ์์ฑ
MyBatis
- SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํด์ผ ํ๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
- ์ฟผ๋ฆฌ ๋ณ๊ฒฝ ์ XML ํ์ผ์ด๋ Mapper ์ธํฐํ์ด์ค์์ ์์ ์ ์งํํฉ๋๋ค.
//xml
<select id="selectUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
public interface UserMapper {
User selectUserById(int id);
}
JPA
- ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ์์
ํ๋ฉฐ, ์ฟผ๋ฆฌ๋ JPQL(Java Persistence Query Language) ๋๋ ๋ฉ์๋ ๋ช
๋ช
๊ท์น์ ํตํด ์๋ ์์ฑ๋ฉ๋๋ค.
- ๋ณต์กํ ์ฟผ๋ฆฌ๋ @Query ์ด๋
ธํ
์ด์
์ด๋ Criteria API๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํฉ๋๋ค.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
public interface UserRepository extends JpaRepository<User, Long> {
User findById(Long id);
}
โ๏ธ 3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข
์์ฑ
MyBatis
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐํ๊ฒ ์์กด์ ์ด๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๊ฐ ๋ณ๊ฒฝ๋๋ฉด SQL ์์ ์ด ํ์์ ์
๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํนํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ฝ์ต๋๋ค.
JPA
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋
๋ฆฝ์ ์ธ ์ถ์ํ๋ฅผ ์ ๊ณตํ์ง๋ง, ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ ํ๋ ์์
์ ๋ณต์กํ ์ ์์ต๋๋ค.
- Hibernate ๊ฐ์ ๊ตฌํ์ฒด๋ฅผ ํตํด ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ํฉ๋๋ค.
โ๏ธ 4. ํ์ต ๊ณก์
MyBatis
- SQL์ ์ด๋ฏธ ์๊ณ ์๋ค๋ฉด ๋น๊ต์ ์ฝ๊ฒ ํ์ตํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ด ๋ช
์์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น
์ด ์ฝ์ต๋๋ค.
JPA
- ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์ดํดํด์ผ ํ๋ฏ๋ก ํ์ต ๊ณก์ ์ด ๋ค์ ๋์ต๋๋ค.
- ๋์ ๋ฐฉ์(์บ์ฑ, ์์์ฑ ์ปจํ
์คํธ, Lazy/Eager ๋ก๋ฉ ๋ฑ)์ ๊น์ด ์ดํดํด์ผ ํฉ๋๋ค.
โ๏ธ 5. ์ฑ๋ฅ
MyBatis
- ์ง์ ์์ฑํ SQL์ ์ฌ์ฉํ๋ฏ๋ก ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ฉ์ดํฉ๋๋ค.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ๋ฆฌํฉ๋๋ค.
JPA
- ORM ๊ธฐ์ ๋ก ์ธํด ์ด๊ธฐ ์ค์ ์ด๋ ๋ณต์กํ ๋งคํ์์ ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํ์ง๋ง ์บ์ฑ, ๋ฐฐ์น ์ฒ๋ฆฌ ๋ฑ์ ํตํด ์ต์ ํํ ์ ์์ต๋๋ค.
โ๏ธ 6. ์ฃผ์ ํน์ง ์์ฝ
| ํน์ง | MyBatis | JPA |
|---|
| ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ | SQL ์ค์ฌ | ๊ฐ์ฒด ์ค์ฌ |
| ์ฟผ๋ฆฌ ์์ฑ ๋ฐฉ์ | ์ง์ SQL ์์ฑ | JPQL, ๋ฉ์๋ ๊ธฐ๋ฐ, ๋๋ Criteria API |
| ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์กด์ฑ | ๋์ | ๋ฎ์ |
| ํ์ต ๊ณก์ | ๋ฎ์ | ๋์ |
| ์ ์ฐ์ฑ | SQL ์์ฑ์ ์ ๋ฆฌ | ๊ฐ์ฒด ์ค์ฌ ์์
์ ์ ๋ฆฌ |
| ์๋ํ ์์ค | ๋ฎ์ | ๋์ |
โ๏ธ ๊ทธ๋์ ๋ญ ์จ์ผํด??
MyBatis
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํนํ๋ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋ง๊ณ , SQL ์์ฑ์ด ๋น๋ฒํ ๊ฒฝ์ฐ ์ ํฉ.
- ๋น ๋ฅธ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ.
JPA
- ๊ฐ์ฒด ์ค์ฌ ์ค๊ณ๊ฐ ์ค์ํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋
๋ฆฝ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ ์ ํฉ.
- ์๋ํ๋ CRUD ์์
์ด ๋น๋ฒํ๊ณ , ๊ฐ๋ฐ ์๋๋ฅผ ์ค์ํ๋ ๊ฒฝ์ฐ.