ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MyBatis - 데이터 가져오는 방법들
    MyBatis 2019. 2. 8. 14:19

    1. selectOne

    SqlSession의 selectOne 메소드를 이용하는 방법이다.
    selectOne 메소드는 하나의 값만 가져올 경우에 사용한다.
    첫번째 매개변수는 mapper의 namespace . select 태그의 id 값을 넣어준다.
    두번째 매개변수는 Object 형식으로 변수를 넣어준다. (옵션)

    String name = session.selectOne("student.selectName", studentNo);

    mapper 에서는 다음과 같이 입력한다

        <select id="selectName" parameterType="_int" resultType="string">
            SELECT STUDENT_NAME FROM STUDENT WHERE STUDENT_NO = #{studentNo}
        </select>

    parameterType은 파라미터의 타입이며 resultType 은 반환 값의 타입이다.

    2. 데이터를 객체로 받기 (as 사용)

        <select id="selectOne" parameterType="_int" resultType="student">
            SELECT student_no as studentNo, student_name as studentName, student_tel as studentTel FROM STUDENT WHERE STUDENT_NO = #{studentNo}
        </select>

    데이터베이스에서 데이터를 가져올 때 저장할 객체의 속성 이름과 같도록 as 를 이용하여 별칭을 주는 방법이다.
    객체와 동일하게 적었을 경우 객체로 정보가 알아서 저장된다.
    resultType 에 student 라고 바로 입력할 수 있는 것은 mybatis-config.xml 에 typeAlias 를 넣어주었기 때문이다. (이 글을 참고)

    3. result map 으로 매핑하기

        <select id="selectOneAjax_" parameterType="_int" resultMap="selectMap">
          SELECT * FROM STUDENT WHERE STUDENT_NO = #{studentNo}
        </select>

    resultMap 에는 사용할 rersultMap의 id 값을 넣어준다.

    resultMap을 만들어 보자.
    mapper 에서 resultMap 태그를 생성한 후
    resultMap 태그 안에 result 태그로 데이터베이스의 컬럼과 프로퍼티를 매핑시킨다.
    프로퍼티는 객체 속성의 이름을 넣어준다.

        <resultMap type="student" id="selectMap">
          <result column="student_no" property="studentNo"/>
          <result column="student_name" property="studentName"/>
          <result column="student_tel" property="studentTel"/>
        </resultMap> 

    resultMap 의 type 은 클래스 명을 넣어준다.
    as를 사용하지 않고 객체로 데이터를 받아올 수 있다.

    4. result map 에서 hashMap 으로 가져오기

    이 방법은 반환 값이 Map 으로 나온다.

        <select id="selectOneAjax_" parameterType="_int" resultMap="selectMap">
          SELECT * FROM STUDENT WHERE STUDENT_NO = #{studentNo}
        </select>

    select 태그는 동일하지만 resultMap 태그가 단순해진다.
    <resultMap type="hashMap" id="selectMap"></resultMap>
    resultMap의 type에 hashMap을 넣어주고 id 값을 정하면 끝이다.
    Map 으로 반환 되는데 key 값이 데이터베이스 컬럼 명과 동일해진다.
    따라서 반환된 값을 jsp 에서 사용할 경우에는 다음과 같이 key 값을 대문자로 적어야 한다.

        <p>학생번호: ${result.STUDENT_NO}
        <p>학생이름: ${result.STUDENT_NAME}
        <p>전화번호: ${result.STUDENT_TEL}

    5. List로 데이터 받기 (selectList)

    SqlSession 의 selectList 메소드를 이용한다.
    List<Student> list = session.selectList("student.selectList");

    mapper에서도 하나만 받을 때와 다를 것 없다.

        <select id="selectList" resultType="student">
          SELECT student_no as studentNo, student_name as studentName, student_tel as studentTel, student_email as studentEmail, student_addr as studentAddress, reg_date as redDate FROM STUDENT
        </select>

    6. List를 Map으로 받기

    객체(vo)를 사용하지 않고 데이터를 받을 수 있다.
    List<Map<String, String>> list = session.selectList("student.selectMap");

    위에서 사용한 resultMap을 이용한다.

        <select id="selectMap" resultMap="selectMapList">
          SELECT * FROM STUDENT
        </select>
        <resultMap type="map" id="selectMapList">
          <result column="student_no" property="studentNo"/>
          <result column="student_name" property="studentName"/>
          <result column="student_tel" property="studentTel"/>
        </resultMap>
    반응형

    댓글 2

    • 오잉? 2021.03.31 04:46

      <select id="selectOneAjax_" parameterType="_int" resultMap="selectMap">

      행님 이 부분이요
      parameterType 보면

      그냥 int 가 아니라
      왜 언더바를 삽입해서 _int 라고 하는 거죠?
      무슨 차이가 있는 건가요

    • 블린더르 2021.03.31 09:02 신고

      https://mybatis.org/mybatis-3/ko/configuration.html#typeAliases

      http://www.devkuma.com/books/pages/740

      여기를 참고하시면 도움이 될 것 같습니다~!

Designed by Tistory.