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}
ページのトップへ戻る