Back-End
MyBatis
newny
2023. 5. 16. 19:53
반응형
마이바티스란?
- 관계형 데이터베이스 프로그래밍을 쉽게 도와주는 프레임 워크
- 리포지토리 영역(DAO)을 마이바티스가 관리함
- 관리 영역 - sql관리, 파라미터 대입, 실행, 결과 매핑하여 서비스 영역으로 돌려줌
- 개발자가 쿼리를 직접 실행하지 않고 설정만 해주면됨
- XML 파일로 작성함
마이바티스 시작
configuration
DB 연결정보 관리 (DBOpen 클래스 역할), mapper xml 파일(DAO 클래스) 등록
<!-- configuration 파일 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 클래스에 대한 별칭 부여 -->
<typeAliases>
<!-- DTO 클래스를 별칭 부여하여 mapper.xml파일에서 사용 -->
<typeAlias type="net.mem.MemDTO" alias="memDTO"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- Oracle DB 연결 정보 (DBOpen 클래스 역할) -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<!-- SQL 문을 작성해놓은 XML 문서 (DAO 클래스 역할) -->
<mappers>
<mapper resource="config/mem.xml"/>
</mappers>
</configuration>
mapper
- 쿼리문 관리 (DAO 클래스 역할)
- 대체적으로 mapper의 namespace 이름은 테이블명과 같게 한다
- 종결문자(;) 생략하여 쿼리문 작성
- 파라미터 바인딩 표기법 - #{property} : 물음표를 사용하지 않고 parameterType 객체의 멤버 변수를 바로 적용함
- resultMap : DB 에서 가져온 행 값을 객체에 매핑하는 방법을 정의 (RowMapper 역할)
<!-- mapper 파일 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mem.xml -->
<!-- 실행할 SQL 문을 정의해 놓은 파일 (DAO 클래스 역할) -->
<mapper namespace="mem">
<insert id="insertRow" parameterType="memDTO"> /* mem.insertRow로 접근 */
INSERT INTO mem (num, name, age) VALUES (mem_seq.nextval, #{name} , #{age})
</insert>
<select id="selectAll">
SELECT num, name, age
FROM mem
ORDER BY num DESC
</select>
</mapper>
<!-- ResultSet 에서 행 값을 가져와서 DTO 에 담고, ArrayList 에 추가하는 기능 -->
<resultMap type="net.mem.MemDTO" id="rs">
<result column="num" property="num"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
</resultMap>
반응형