Mapperの作成
1. 対象SQL
以下の様なSQLを発行するMapperを作成する。 検索条件は指定されたものだけを条件とするようにする。 テーブル間の関連は1:1:1である。
select
p.id, p.kind_id, p.maker_id, p.product_name, p.create_at, p.update_at, p.version,
k.id k_id, k.kind_name, k.create_at k_create_at, k.update_at k_update_at, k.version k_version,
m.id m_id, m.maker_name, m.create_at m_create_at, m.update_at m_update_at, m.version m_version
from product p
join kind_mst k on k.id = p.kind_id
join maker_mst m on m.id = p.maker_id
where
p.id = #{id}
and p.maker_id = #{prod.makerId}
and p.product_name = #{productName}
order by p.id
2. 検索結果
検索結果を以下のクラスに格納する。
src/main/java/com/ziqoo/demo/dao/query/model/ProductQueryModel.java
package com.ziqoo.demo.dao.query.model;
import com.ziqoo.demo.dao.table.model.KindMst;
import com.ziqoo.demo.dao.table.model.MakerMst;
import com.ziqoo.demo.dao.table.model.Product;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class ProductQueryModel extends Product {
private MakerMst makerMst;
private KindMst kindMst;
}
3. Mapper
Mapperは以下の通り。
src/main/java/com/ziqoo/demo/dao/query/mapper/ProductQueryMapper.java
package com.ziqoo.demo.dao.query.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ziqoo.demo.dao.query.model.ProductQueryModel;
import com.ziqoo.demo.dao.table.model.Product;
public interface ProductQueryMapper {
List<ProductQueryModel> selectByProduct(@Param("prod") Product prod);
}
4. XML
XMLファイルは以下の通り
src/main/resources/com/ziqoo/demo/dao/query/mapper/ProductQueryMapper.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="com.ziqoo.demo.dao.query.mapper.ProductQueryMapper">
<resultMap id="resultMap" type="com.ziqoo.demo.dao.query.model.ProductQueryModel">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="kind_id" jdbcType="INTEGER" property="kindId" />
<result column="maker_id" jdbcType="INTEGER" property="makerId" />
<result column="product_name" jdbcType="VARCHAR" property="productName" />
<result column="create_at" jdbcType="TIMESTAMP" property="createAt" />
<result column="update_at" jdbcType="TIMESTAMP" property="updateAt" />
<result column="version" jdbcType="INTEGER" property="version" />
<association property="kindMst" javaType="com.ziqoo.demo.dao.table.model.KindMst">
<id column="k_id" jdbcType="INTEGER" property="id" />
<result column="kind_name" jdbcType="VARCHAR" property="kindName" />
<result column="k_create_at" jdbcType="TIMESTAMP" property="createAt" />
<result column="k_update_at" jdbcType="TIMESTAMP" property="updateAt" />
<result column="k_version" jdbcType="INTEGER" property="version" />
</association>
<association property="makerMst" javaType="com.ziqoo.demo.dao.table.model.MakerMst">
<id column="m_id" jdbcType="INTEGER" property="id" />
<result column="maker_name" jdbcType="VARCHAR" property="makerName" />
<result column="m_create_at" jdbcType="TIMESTAMP" property="createAt" />
<result column="m_update_at" jdbcType="TIMESTAMP" property="updateAt" />
<result column="m_version" jdbcType="INTEGER" property="version" />
</association>
</resultMap>
<select id="selectByProduct" parameterType="com.ziqoo.demo.dao.table.model.Product" resultMap="resultMap">
select
p.id, p.kind_id, p.maker_id, p.product_name, p.create_at, p.update_at, p.version,
k.id k_id, k.kind_name, k.create_at k_create_at, k.update_at k_update_at, k.version k_version,
m.id m_id, m.maker_name, m.create_at m_create_at, m.update_at m_update_at, m.version m_version
from product p
join kind_mst k on k.id = p.kind_id
join maker_mst m on m.id = p.maker_id
<where>
<if test="prod.id != null">
p.id = #{prod.id}
</if>
<if test="prod.makerId != null">
and p.maker_id = #{prod.makerId}
</if>
<if test="prod.productName != null">
and p.product_name = #{prod.productName}
</if>
</where>
order by p.id
</select>
</mapper>
テーブル関連が1:nの場合は上記resultMapのassociationをcollectionタグに変更する。
例)
<collection oftype="com.ziqoo.demo.dao.table.model.MakerMst" property="makerList">
...
</collection>

