반응형
MyBatis와 JPA는 Java에서 데이터베이스와 상호작용하기 위한 두 가지 주요 방법입니다.
1. MyBatis
MyBatis는 SQL 쿼리를 직접 작성하고 이를 매핑하여 객체와 데이터베이스 간의 변환을 처리하는 프레임워크입니다. SQL을 직접 작성할 수 있어 복잡한 쿼리를 쉽게 사용할 수 있지만, 쿼리와 매핑을 수동으로 관리해야 합니다.
특징
- SQL 쿼리를 직접 작성할 수 있음.
- XML 파일이나 어노테이션을 사용하여 매핑 설정.
- 복잡한 쿼리를 쉽게 작성 가능.
- SQL의 유연성을 제공하지만, 코드량이 많아질 수 있음.
코드 예시
1. MyBatis 설정 (XML)
mybatis-config.xml
xml
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
2. 매퍼 XML 파일
UserMapper.xml
xml
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
3. DAO 인터페이스
java
public interface UserMapper {
User getUserById(int id);
}
4. service 클래스
java
@Service
public class UserService {
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User findUserById(int id) {
return userMapper.getUserById(id);
}
}
2. JPA (Java Persistence API)
JPA는 Java에서 ORM(Object-Relational Mapping)을 구현하는 표준 API입니다. JPA를 사용하면 객체와 데이터베이스 간의 매핑이 자동으로 이루어져 SQL 쿼리를 직접 작성할 필요가 없습니다.
특징
- SQL 쿼리 없이 객체 지향적으로 데이터베이스에 접근 가능.
- 엔티티 클래스와 리포지토리를 통해 데이터 관리.
- JPQL(Java Persistence Query Language)을 사용할 수 있음.
- 코드량이 줄어들고 유지보수가 용이.
코드 예시
1. 엔티티 클래스
java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// Getters and Setters
}
2. 리포지토리 인터페이스
java
public interface UserRepository extends JpaRepository<User, Integer> {
User findById(int id);
}
3. service 클래스
java
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User findUserById(int id) {
return userRepository.findById(id).orElse(null);
}
}
3. MyBatis vs JPA 비교
특징 | MyBatis | JPA |
쿼리 작성 | SQL을 직접 작성 | SQL을 자동 생성 (JPQL 사용 가능) |
매핑 방식 | XML 또는 어노테이션 기반 매핑 | 객체와 데이터베이스 간의 자동 매핑 |
복잡성 | 복잡한 쿼리를 쉽게 작성할 수 있음 | 객체 지향적 접근, 코드 간결성 |
성능 | SQL 최적화 가능 | ORM으로 인해 성능 저하 가능성 있음 |
학습 곡선 | SQL에 익숙한 개발자에게 쉬움 | ORM 개념 이해가 필요, 초기 학습 필요 |
결론
MyBatis는 SQL 쿼리를 직접 제어하고 복잡한 쿼리를 작성할 수 있는 유연성을 제공합니다. 하지만 매핑 관리가 수동으로 이루어져 코드가 길어질 수 있습니다.
JPA는 객체 지향적으로 데이터베이스를 다룰 수 있으며, 코드가 더 간결해지고 유지보수가 쉬워집니다. 다만 ORM에 대한 이해가 필요합니다.
반응형
'IT개발 > Mybatis, JPA' 카테고리의 다른 글
JPA & Hibernate 개념 (0) | 2025.01.17 |
---|---|
Mybatis란(백엔드개발/자바/서버/데이터/Java/backend) (0) | 2024.11.22 |
댓글