SpringFrameworkでMyBatisを使ってみる④(Javaアプリケーション)
今回はパラメータが一つの場合の条件文(_parameter)とIN検索、LIKE検索をやります。初回の設定ファイルあり、検索条件なしのSELECTをベースに作成するので、先にそちらを作成して下さい。
パラメータが一つの場合の条件文(_parameter)
UserDao.java
package spring.test;
import java.util.List;
public interface UserDao {
public List<User> getUserList(String id);
}
UserDaoImpl.java
package spring.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
public class UserDaoImpl implements UserDao {
private SqlSession session;
public void setSession(SqlSession ss) {
this.session = ss;
}
public List<User> getUserList(String id) {
return session.selectList("test.sql.selectUser", id);
}
}
SpringBean.java
package spring.test;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
public class SpringBean {
@Autowired
private UserDao dao;
public void show() {
System.out.println("-- 0001 --");
List<User> list = dao.getUserList("0001");
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName());
}
System.out.println("-- null --");
list = dao.getUserList(null);
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName());
}
System.out.println("-- '' ---");
list = dao.getUserList("");
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName());
}
}
}
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="test.sql">
<select id="selectUser" resultType="spring.test.User" parameterType="String">
select id,name from m_user
<where>
<if test="_parameter != null">ID = #{id}</if>
</where>
</select>
</mapper>
引数が単体の場合、_parameterを指定して条件文を書きます。
実行
引数を指定すると、その引数で検索し、NULLはすべてを検索します。
IN検索
UserDao.java
package spring.test;
import java.util.List;
public interface UserDao {
public List<User> getUserList(List<String> ids);
}
UserDaoImpl.java
package spring.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
public class UserDaoImpl implements UserDao {
private SqlSession session;
public void setSession(SqlSession ss) {
this.session = ss;
}
public List<User> getUserList(List<String> ids) {
return session.selectList("test.sql.selectUser", ids);
}
}
SpringBean.java
package spring.test;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
public class SpringBean {
@Autowired
private UserDao dao;
public void show() {
List<String> ids = new ArrayList<>();
List<User> list = dao.getUserList(null);
System.out.println("--- null ---");
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName());
}
System.out.println("--- size:0 ---");
list = dao.getUserList(ids);
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName());
}
System.out.println("--- size:2 ---");
ids.add("0001");
ids.add("0002");
list = dao.getUserList(ids);
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName());
}
}
}
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="test.sql">
<select id="selectUser" resultType="spring.test.User">
SELECT ID,NAME FROM M_USER
<where>
<if test="list != null and list.size() > 0">
ID IN
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</if>
</where>
</select>
</mapper>
実行
引数をNULL、size:0のListで検索するとすべて検索し、引数を指定すると指定した引数でIN検索が行われます。
LIKE検索
UserDao.java
package spring.test;
import java.util.List;
public interface UserDao {
public List<User> getUserList(User user);
}
UserDaoImpl.java
package spring.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
public class UserDaoImpl implements UserDao {
private SqlSession session;
public void setSession(SqlSession ss) {
this.session = ss;
}
@Override
public List<User> getUserList(User user) {
return session.selectList("test.sql.selectUser", user);
}
}
SpringBean.java
package spring.test;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
public class SpringBean {
@Autowired
private UserDao dao;
public void show() {
User userArg = new User();
userArg.setName("test");
// SELECT を実行
List<User> list = dao.getUserList(userArg);
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName());
}
}
}
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="test.sql">
<select id="selectUser" parameterType="spring.test.User"
resultType="spring.test.User">
SELECT ID, NAME FROM M_USER
<where>
<if test="id != null">ID = #{id}</if>
<if test="name != null">AND NAME LIKE '${name}%'</if>
</where>
</select>
</mapper>
LIKE検索の場合、項目指定を${項目名}のようにドルマークで指定し、%を付けてシングルクォーテーションで囲みます。
#{項目名}のようにシャープで指定するとシングルクォーテーションを自動で付けてくれるため省略できますが、
${項目名}のようにドルマークで指定した場合、シングルクォーテーションを自分で付ける必要がありますが、
LIKE検索の%を付けるようなことができます。
ページのトップへ戻る