DAO 패턴과 MyBatis
Q1.
DAO 패턴이 뭐지?
A1.
DAO(Data Access Object) 패턴은 데이터베이스와의 상호작용을 캡슐화하는 디자인 패턴입니다. DAO 패턴을 사용하면 데이터베이스 접근 로직을 분리하여 코드의 유지보수성과 재사용성을 높일 수 있습니다. DAO 클래스는 데이터베이스 CRUD(Create, Read, Update, Delete) 작업을 수행하는 메서드를 제공합니다.
DAO 패턴의 주요 구성 요소는 다음과 같습니다:
1. DAO 인터페이스: 데이터 접근 메서드의 인터페이스를 정의합니다.
2. DAO 구현 클래스: 인터페이스를 구현하여 실제 데이터베이스 접근 로직을 작성합니다.
3. 모델 클래스: 데이터베이스 테이블과 매핑되는 엔티티 클래스입니다.
4. 서비스 클래스: 비즈니스 로직을 처리하며, DAO를 사용하여 데이터베이스와 상호작용합니다.
예를 들어, Department 엔티티에 대한 DAO 패턴을 구현한 코드는 다음과 같습니다:
// 엔티티 클래스
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getters and setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// DAO 인터페이스
public interface DepartmentDAO {
void save(Department department);
Department findById(Long id);
List<Department> findAll();
void update(Department department);
void delete(Long id);
}
// DAO 구현 클래스
public class DepartmentDAOImpl implements DepartmentDAO {
@PersistenceContext
private EntityManager entityManager;
@Override
public void save(Department department) {
entityManager.persist(department);
}
@Override
public Department findById(Long id) {
return entityManager.find(Department.class, id);
}
@Override
public List<Department> findAll() {
return entityManager.createQuery("from Department", Department.class).getResultList();
}
@Override
public void update(Department department) {
entityManager.merge(department);
}
@Override
public void delete(Long id) {
Department department = findById(id);
if (department != null) {
entityManager.remove(department);
}
}
}
// 서비스 클래스
@Service
public class DepartmentService {
@Autowired
private DepartmentDAO departmentDAO;
public void createDepartment(Department department) {
departmentDAO.save(department);
}
public Department getDepartment(Long id) {
return departmentDAO.findById(id);
}
public List<Department> getAllDepartments() {
return departmentDAO.findAll();
}
public void updateDepartment(Department department) {
departmentDAO.update(department);
}
public void deleteDepartment(Long id) {
departmentDAO.delete(id);
}
}
이 예제에서 DepartmentDAO 인터페이스는 데이터 접근 메서드를 정의하고, DepartmentDAOImpl 클래스는 이를 구현하여 실제 데이터베이스 접근 로직을 작성합니다. DepartmentService 클래스는 비즈니스 로직을 처리하며, DAO를 사용하여 데이터베이스와 상호작용합니다.
Q2.
DAO 패턴 작성이 번거로워서 생긴게 MyBatis 인가?
A2.
네, 맞습니다. MyBatis는 DAO 패턴을 보다 쉽게 구현할 수 있도록 도와주는 ORM 프레임워크입니다. MyBatis는 SQL 쿼리를 XML 파일이나 어노테이션으로 관리할 수 있게 해주며, 복잡한 JDBC 코드 작성을 피할 수 있게 해줍니다. 이를 통해 데이터베이스 접근 로직을 간결하고 유지보수하기 쉽게 만듭니다.
MyBatis를 사용하면 DAO 패턴을 구현하는 과정이 단순해집니다. 예를 들어, Department 엔티티에 대한 MyBatis 설정과 DAO 구현은 다음과 같이 작성할 수 있습니다:
엔티티 클래스:
~~~코드들~~~
이 예제에서 MyBatis 매퍼 인터페이스와 XML 파일을 사용하여 SQL 쿼리를 정의하고, 이를 통해 데이터베이스 접근 로직을 간단하게 구현할 수 있습니다. MyBatis는 DAO 패턴을 보다 쉽게 구현할 수 있도록 도와주며, SQL 쿼리를 명시적으로 작성할 수 있는 유연성을 제공합니다.