トッカンソフトウェア

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

前回は単純なSELECTしかやらなかったので、今回はINSERT、UPDATE、DELETE、条件付きのSELECTをやります。
今回は前回から変更したファイルだけ書きます。


MyBatisのSQL設定ファイル(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 and id != ''">ID = #{id}</if>
			<if test="name != null and name != ''">AND NAME = #{name}</if>
		</where>
	</select>

	<select id="selectUser2" parameterType="map"
		resultType="spring.test.User">

		SELECT ID, NAME FROM M_USER

		<where>
			<if test="id != null and id != ''">ID = #{id}</if>
			<if test="name != null and name != ''">AND NAME = #{name}</if>
		</where>
	</select>

	<insert id="insertUser" parameterType="spring.test.User">

		INSERT INTO M_USER(ID,
		NAME)
		VALUES(#{id}, #{name})

	</insert>

	<update id="updateUser" parameterType="spring.test.User">

		UPDATE M_USER SET NAME =
		#{name}
		WHERE ID = #{id}

	</update>

	<delete id="deleteUser" parameterType="String">

		DELETE FROM M_USER WHERE
		ID = #{id}

	</delete>
</mapper>
<if test="条件"></if>で動的にSQLを変更することができます。
<where></where>で囲むことにより、条件によりWHERE AND 条件 となった場合に自動的にWHERE 条件に変更してくれます。
MapをparameterTypeに指定する場合は"map"とします。

UserDao.java


package spring.test;

import java.util.List;
import java.util.Map;

public interface UserDao {

	public List<User> getUserList(User user);

	public List<User> getUserList2(Map<String, String> userMap);

	public void insertUser(User user);

	public void updateUser(User user);

	public void deleteUser(String id);
}

UserDaoImpl.java


package spring.test;

import java.util.List;
import java.util.Map;

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);
	}

	@Override
	public List<User> getUserList2(Map<String, String> userMap) {
		return session.selectList("test.sql.selectUser", userMap);
	}

	@Override
	public void insertUser(User user) {
		session.insert("test.sql.insertUser", user);
	}

	@Override
	public void updateUser(User user) {
		session.update("test.sql.updateUser", user);
	}

	@Override
	public void deleteUser(String id) {
		session.delete("test.sql.deleteUser", id);
	}
}
引数で条件オブジェクトを渡します。

SpringBean.java


package spring.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

public class SpringBean {

	@Autowired
	private UserDao dao;

	public void show() {

		User userArg = new User();

		userArg.setId("0005");
		userArg.setName("name");

		// INSERT を実行
		dao.insertUser(userArg);

		userArg.setName("name2");

		// UPDATE を実行
		dao.updateUser(userArg);

		// SELECT を実行
		List<User> list = dao.getUserList(userArg);
		for (User user : list) {
			System.out.println(user.getId() + "-" + user.getName());
		}

		Map<String, String> userMap = new HashMap<>();

		userMap.put("id", "0005");
		userMap.put("name", "name2");

		List<User> list2 = dao.getUserList2(userMap);

		for (User user : list2) {
			System.out.println(user.getId() + "+" + user.getName());
		}

		// DELETE を実行
		dao.deleteUser(userArg.id);
	}
}

ドル($)とシャープ(#)

値を連携させるときにドル記号とシャープ記号を使えます。

ドル記号はテーブル名などそのまま出力するもの、
シャープ記号は条件に使うもので実行時にシングルクォーテーションを自動で付けてくれます。
				
SELECT * FROM ${table} WHERE KEY=#{key}

			



ページのトップへ戻る