MyBatisはどのように動的にマッパーを生成するか
MyBatisの動的SQL機能を利用することで、MyBatisは動的Mapperを生成できます。これにより、XMLマッピングファイルで動的SQL文を記述でき、入力パラメータに応じて異なるSQL文を生成できます。
動的 Mapper 生成を実現する手順は次のとおりです。
- ネイティブなクエリメソッドを定義するMapperインターフェースを作成する。例:
public interface UserMapper {
List<User> selectUsersByCondition(Map<String, Object> params);
}
- 動的 SQL 文を記述する Mapper XML マッピングファイルを作成する。例:
<select id="selectUsersByCondition" resultType="User">
SELECT * FROM users
<where>
<if test="name != null and name != ''">
AND name = #{name}
</if>
<if test="email != null and email != ''">
AND email = #{email}
</if>
</where>
</select>
- MyBatisの設定ファイルに、MapperインターフェイスとXMLマッピングファイルをインポートする。例:
<mappers>
<mapper resource="com/example/mappers/UserMapper.xml"/>
</mappers>
- アプリケーションではMapperインターフェースを使用してクエリを行います。例えば:
Map<String, Object> params = new HashMap<>();
params.put("name", "John");
List<User> users = userMapper.selectUsersByCondition(params);
この例では、受け取ったパラメータに応じて動的に異なるSQL文を生成している。nameパラメータが渡されれば、nameが指定された値に等しいというSQL文を生成し、emailパラメータが渡されれば、emailが指定された値に等しいというSQL文を生成する。
動的SQLを利用することで、問い合わせ条件に応じて異なるSQL文を作成し、Mapperの動的生成を実現します。