はじめに
現場にてデータベースの操作はMyBatisGeneratorで自動生成したものを使用したが、SELECTなどは処理にあわせて作成したため、備忘録としてまとめます。
変数を渡して検索
Mapperクラスにて明記している引数は#{}
を使いバインドさせます。
resultType
に取得したデータを格納するEntityなどのパスを設定します。
public interface KeiyakuMapper {
List<KeiyakuEntity> SelectKeiyaku(String keiyakuNo);
}
<select id="SelectKeiyaku"
resultType="jp.co.entity.KeiyakuEntity">
SELECT *
FROM keiyaku
WHERE keiyaku_no = #{keiyakuNo}
</select>
部分一致の検索
部分一致の検索にはワイルドカードの%
を使います。
CONCAT
にて#{}
の部分と結合させます。
public interface BushoMapper {
List<BushoEntity> SelectBusho(String bushoId);
}
<select id="SelectBusho"
resultType="jp.co.entity.BushoEntity">
SELECT *
FROM Busho
WHERE busho_id = LIKE CONCAT(#{bushoId}, '%')
</select>
リストの要素を検索
画面にて複数のチェックボックスが選択されたときなどに必要になった処理です。
引数が2つ以上あるのでアノテーションの@Param
を引数に設定します。
foreach
を使いIN句
に渡すパラメーターをループさせます。
public interface KeiyakuMapper {
List<KeiyakuEntity> SelectKeiyakuIn(@Param("keiyakuNo")String keiyakuNo, @Param("statusList") List<String> statusList);
}
<select id="SelectKeiyakuIn"
resultType="jp.co.entity.KeiyakuEntity">
SELECT *
FROM keiyaku
WHERE keiyaku_no = #{keiyakuNo}
AND status IN
<foreach item="status" collection="statusList" open="(" separator="," close=")">
#{status}
</foreach>
</select>
条件分岐
引数のパラメーターがnullや空白が渡されたときはWHERE句には設定しないなどの処理が必要な場合は、if
を使えば条件分岐できます。
public interface KeiyakuMapper {
List<KeiyakuEntity> SelectKeiyakuIf(String keiyakuNo);
}
<select id="SelectKeiyakuIn"
resultType="jp.co.entity.KeiyakuEntity">
SELECT *
FROM keiyaku
WHERE 1 = 1
<if test = "keiyakuNo != null and keiyakuNo != ''">
keiyaku_no = #{keiyakuNo}
</if>
</select>
参考にした記事