トッカンソフトウェア

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検索の%を付けるようなことができます。

ページのトップへ戻る