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は最初の例と同じになります。
ページのトップへ戻る