トッカンソフトウェア

SpringFrameworkでMyBatisを使ってみる⑦(Javaアプリケーション)

今回はsqlファイルでforeachを使ってみます。

MyBatis⑤の続きなので、先にそちらで環境を構築して下さい。


foreach(Param指定なし)

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="spring.test.UserMapper">
	<select id="getUserList" resultType="spring.test.User">
		select id,name from m_user
		<where>
			<foreach item="item" collection="list" open="("
			separator=" or " close=")">
				(
				id = #{item.id}
				and name = #{item.name}
				)
			</foreach>
		</where>
	</select>
</mapper>


			
Paramの指定がない場合、collectionは"list"を指定します。

UserMapper.java

				
package spring.test;

import java.util.List;

public interface UserMapper {

	public List<User> getUserList(List<User> ary);

}


			

SpringBean.java

				
package spring.test;

import java.util.ArrayList;
import java.util.List;

public class SpringBean {

	private final UserMapper userMapper;

	public SpringBean(UserMapper mp) {
		this.userMapper = mp;
	}

	public void show() {
		List<User> args = new ArrayList<>();

		User arg1 = new User();
		arg1.setId("test");
		arg1.setName("テスト");
		args.add(arg1);
		User arg2 = new User();
		arg2.setId("test2");
		arg2.setName("テスト2");
		args.add(arg2);

		List<User> list = userMapper.getUserList(args);
		for (User user : list) {
			System.out.println(user.getId() + "-" + user.getName());
		}
	}
}

			
pom.xml、SpringTest.xml、User.java、HelloWorldTest.java はMyBatis⑤を見て下さい。

実行されるSQL
				
select
  id, name 
from
  m_user 
WHERE
  ( 
    (id = 'test' and name = 'テスト') 
    or (id = 'test2' and name = 'テスト2')
  )


			

foreach(Param指定あり)

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="spring.test.UserMapper">
	<select id="getUserList" resultType="spring.test.User">
		select id,name from m_user
		<where>
			<foreach item="item" collection="prm" open="("
			separator=" or " close=")">
				(
				id = #{item.id}
				and name = #{item.name}
				)
			</foreach>
		</where>
	</select>
</mapper>


			
Paramの指定がある場合、collectionにはParamで指定したものを指定します。

UserMapper.java

				
package spring.test;

import java.util.List;

import org.apache.ibatis.annotations.Param;

public interface UserMapper {

	public List<User> getUserList(@Param("prm") List<User> ary);

}


			
出力されるSQLは最初の例と同じになります。


ページのトップへ戻る