MyBatis | 검색 결과를 임의의 Java 오브젝트에 매핑 | 단일 오브젝트 맵핑

기본

데이터 테이블

test_table

id value number
1 hoge 100
2 fuga 200
3 piyo 300

소스 코드

TestTable.java

package sample.mybatis;

public class TestTable {

    private int id;
    private String string;
    private Embedded embedded;

    @Override
    public String toString() {
        return "TestTable [id=" + id + ", string=" + string + ", embedded=" + embedded + "]";
    }
}

Embedded.java

package sample.mybatis;

public class Embedded {

    private int number;

    @Override
    public String toString() {
        return "Embedded [number=" + number + "]";
    }
}

sample_mapper.xml

<?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">
<mapper namespace="sample.mybatis">

  <resultMap type="sample.mybatis.TestTable" id="testTableResultMap">
    <id property="id" column="id" />
    <result property="string" column="string" />
    <association property="embedded" javaType="sample.mybatis.Embedded">
      <result property="number" column="number" />
    </association>
  </resultMap>

  <select id="selectTest" resultMap="testTableResultMap">
    select * from test_table
  </select>
</mapper>

Main.java

package sample.mybatis;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Main {

    public static void main(String[] args) throws Exception {
        try (InputStream in = Main.class.getResourceAsStream("/mybatis-config.xml")) {
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

            try (SqlSession session = factory.openSession()) {
                session
                    .selectList("sample.mybatis.selectTest")
                    .forEach(System.out::println);
            }
        }
    }
}

실행 결과

TestTable [id=1, string=hoge, embedded=Embedded [number=100]]
TestTable [id=2, string=fuga, embedded=Embedded [number=200]]
TestTable [id=3, string=piyo, embedded=Embedded [number=300]]

설명

  • <association> 태그으로 내장된 클래스를 매핑할 수 있다.
  • javaType 속성에 포함된 클래스를 지정한다 (별칭 가능).
  • 자식 요소에 포함된 클래스의 매핑을 정의한다.

포함된 클래스의 정의를 별도 정의로부터

sample_mapper.xml

<?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">
<mapper namespace="sample.mybatis">

  <resultMap type="sample.mybatis.TestTable" id="testTableResultMap">
    <id property="id" column="id" />
    <result property="string" column="string" />

    <association property="embedded" resultMap="embeddedResultMap" />
  </resultMap>

  <resultMap type="sample.mybatis.Embedded" id="embeddedResultMap">
    <result property="number" column="number" />
  </resultMap>

  <select id="selectTest" resultMap="testTableResultMap">
    select * from test_table
  </select>
</mapper>
  • <resultMap>에 별도로 정의할 수 있다.