Java

Spring MyBatisでIN句を使用する方法

MyBatisでIN句を使用する方法

MyBatisで次のようにIN句を使ったSQL文を生成する方法を紹介します。

SELECT * FROM userinfo WHERE id IN ('1','2');

SQL文(XMLファイル)

MyBatisのSQL文(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.example.demo.dao.UserInfoMapper">

    <select id="search" resultType="com.example.demo.entity.UserInfo">
        SELECT
            *
        FROM
            userinfo
        WHERE
            id IN
            <foreach item="item" collection="idList" open="(" separator="," close=")">
                #{item}
            </foreach>
    </select>
</mapper>

上記例では<foreach>~</foreach>で入力パラメータの「idList」を繰り返し、IN句の中身を生成しています。※openで開始の括弧、closeで終了の括弧、separatorで区切り文字のカンマを指定。

Mapperクラス

MyBatisのMapperクラスは次のとおり

package com.example.demo.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.example.demo.entity.UserInfo;

/**
 * ユーザー情報 Mapper
 */
@Mapper
public interface UserInfoMapper {

    /**
     * ユーザー情報検索
     * @param idList idリスト
     * @return 検索結果
     */
    List<UserInfo> search(List<String> idList);
}