MyBatis
MyBatis는 SQL Mapper Framework이다.
개발자들은 MyBatis를 사용해서 JDBC 코드의 복잡하고 지루한 작업을 피할 수가 있다.
MyBatis를 통해 간단한 key로 SQL문을 매핑하여 사용할 수도 있다.
또한 기존의 SQL문을 그대로 활용이 가능하고, 진입장벽이 낮은 편이어서 JDBC의 대안으로 많이 사용된다.
구성요소
- MapperConfig XML 파일 : myBatis의 환경설정 파일
- Mapper 인터페이스 : 데이터베이스 액세스 작업이 정의된 인터페이스
- Mapper XML 파일 : Mapper 인터페이스의 메서드를 참조해서 작성한 매핑된 SQL 구문이 정의된 파일
개발 순서
1. 의존성 라이브러리 추가
- spring-core
- spring-jdbc
- mybatis
- mybatis-spring
2. 데이터 베이스 설정
DB 연결정보를 설정
스프링 설정(XML, properties, yaml 등)에 DB 연결 정보(DataSource) 등록
3. Spring Bean configuration 파일에 mybatis 관련 객체를 스프링 컨테이너의 빈으로 등록
MyBatis XML 설정파일 생성 후 필요한 설정 추가
4. Mapper 인터페이스를 추가
MyBatis Mapper는 DB 쿼리와 자바 메서드를 매핑하는 역할을 한다.
데이터베이스에 접근하기 위한 SQL 쿼리를 작성하고, 이를 실행하는 자바 메서드를 정의한다.
package kr.co.study.dao;
public interface DeptMapper {
void insertDept(Dept dept);
void deleteDeptById(int id);
Dept getDeptById(int id);
List<Dept> getAllDepts();
}
--> mybatis가 만드는 class
public class DepartmentMapperImpl implemenmts DeptMapper {
publid void insertDept(Dept dept) {
t.insert("insertDept", dept);
}
}
5. Mapper XML 파일을 추가
Mapper 속 메서드 별로 SQL 쿼리문 작성
## namespace = 인터페이스의 전체 경로
<mapper namespace="kr.co.study.dao.DeptMapper">
# 인터페이스의 메소드 이름과 id가 무조건 똑같은 이름이어야 함
# 타입은 클래스의 전체 경로를 적을 것
<insert id="insertDept" parameterType="kr.co.study.vo.Dept">
insert into departments
(dept_id, dept_name, manager_id, loc_id)
values
(#{id}, #{name}, #{managerId}, #{locationId})
</insert>
<delete id="deleteDeptById" parameterType="int">
delete from departments
where dept_id = #{value}
</delete>
<select id="getDeptById" parameterType="int" resultType="kr.co.study.vo.Dept">
select dept_id as id,
dept_name as name,
manager_id as managerId,
loc_id as locId
from depts
where dept_id = #{value}
</select>
<select id="getAllDepts" resultType="kr.co.study.vo.Dept">
select dept_id as id,
dept_name as name,
manager_id as managerId,
loc_id as locId
from depts
</select>
</mapper>
6. 데이터베이스 액세스 하기
@Service
public class HrService {
@Autowired
private DeptMapper deptMapper;
}
장점
- 유연성 : SQL 쿼리를 직접 작성할 수 있으므로 매우 유연하다. 복잡한 쿼리 작성도 가능하고, 동적쿼리를 지원하기 때문에 더 유연성 있는 쿼리를 작성할 수 있다.
- 간결성 : SQL쿼리와 프로그래밍 언어 코드를 분리하기 때문에 코드가 간결해지고 유지보수가 용이해진다.
- 성능 : 캐시 기능을 제공하기 때문에 데이터베이스 연산 속도를 높일 수 있다.
- 다양한 DB 지원 : Oracle, MySQL뿐 아니라 다양한 DB 툴에 대한 지원을 제공한다.
참고
'멋진 개발자 > Java & Spring' 카테고리의 다른 글
개발자 성장 기록 54 - JSP (0) | 2024.04.23 |
---|---|
개발자 성장 기록 53 - Java의 동일성, 동등성 (0) | 2024.04.22 |
개발자 성장 기록 46 - Java의 접근제어자 (0) | 2024.04.12 |
개발자 성장 기록 45 - String, StringBuffer, StringBuilder (0) | 2024.04.09 |
개발자 성장 기록 44 - Concurrent Collection (0) | 2024.04.08 |