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>
반응형