MyBatisを利用するプログラムで、これまではMapperクラスに直接SQL文を記載していたが、今回はXMLファイルにSQL文を移動してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
Spring BootのWEB画面上でサービスクラスを利用してみたこれまではコントローラクラスに主要な処理を記載していたが、MVCモデルに従うと、C(コントローラ)とM(モデル)で明確に分割した方が望ま...
完成した画面イメージ
下記記事の「完成した画面イメージの共有」を参照のこと。
Spring BootのWEB画面上でCRUDを含むOracleアクセス処理を実装してみた(完成イメージ編)今回は、C(Create)・R(Read)・U(Update)・D(Delete)を一通り含むOracle接続処理をSpring Boo...
作成したサンプルプログラムの内容
作成したサンプルプログラムの構成は以下の通り。「前提条件」で記載したソースコードと異なるプログラムを赤枠で囲っている。

「UserDataMapper.java」の内容は以下の通り。SQL文の記載をこのプログラムから削除している。
package com.example.demo;
import org.apache.ibatis.annotations.Mapper;
import java.util.Collection;
@Mapper
public interface UserDataMapper {
/**
* ユーザーデータテーブル(user_data)を全件取得する
* @return ユーザーデータテーブル(user_data)を全データ
*/
Collection<UserData> findAll();
/**
* 指定したIDをもつユーザーデータテーブル(user_data)のデータを取得する
* @param id ID
* @return ユーザーデータテーブル(user_data)の指定したIDのデータ
*/
UserData findById(Long id);
/**
* 指定したIDをもつユーザーデータテーブル(user_data)のデータを削除する
* @param id ID
*/
void deleteById(Long id);
/**
* 指定したユーザーデータテーブル(user_data)のデータを追加する
* @param userData ユーザーデータテーブル(user_data)の追加データ
*/
void create(UserData userData);
/**
* 指定したユーザーデータテーブル(user_data)のデータを更新する
* @param userData ユーザーデータテーブル(user_data)の更新データ
*/
void update(UserData userData);
/**
* ユーザーデータテーブル(user_data)の最大値IDを取得する
* @return ユーザーデータテーブル(user_data)の最大値ID
*/
long findMaxId();
}
freelance hubを利用して10万件を超える案件情報からJava Spring案件を検索してみたfreelance hubは、レバテックフリーランスやフリエン(furien)を始めとした多くのフリーランスエージェントの案件をまとめて...
新規追加した「UserDataMapper.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="com.example.demo.UserDataMapper">
<select id="findAll" resultType="com.example.demo.UserData">
SELECT u.id, u.name, u.birth_year as birthY, u.birth_month as birthM
, u.birth_day as birthD, u.sex as sex, m.sex_value as sex_value
FROM USER_DATA u, M_SEX m WHERE u.sex = m.sex_cd ORDER BY u.id
</select>
<select id="findById" resultType="com.example.demo.UserData">
SELECT id, name, birth_year as birthY
, birth_month as birthM , birth_day as birthD, sex
FROM USER_DATA WHERE id = #{id}
</select>
<delete id="deleteById" parameterType="java.lang.Long">
DELETE FROM USER_DATA WHERE id = #{id}
</delete>
<insert id="create" parameterType="com.example.demo.UserData">
INSERT INTO USER_DATA ( id, name, birth_year, birth_month, birth_day, sex )
VALUES (#{id}, #{name}, #{birthY}, #{birthM}, #{birthD}, #{sex})
</insert>
<update id="update" parameterType="com.example.demo.UserData">
UPDATE USER_DATA SET name = #{name}, birth_year = #{birthY}
, birth_month = #{birthM}, birth_day = #{birthD}, sex = #{sex}
WHERE id = #{id}
</update>
<select id="findMaxId" resultType="long">
SELECT NVL(max(id), 0) FROM USER_DATA
</select>
</mapper>xmlファイルはresourcesフォルダ下のMapperインタフェースと同じディレクトリ下に配置し、mapperタグには、Mapperインタフェースのクラスパスを指定している。
また、select, insert, update, deleteの各タグを利用し、idタグにMapperインタフェースのメソッド名を指定している。さらに、resultTypeで戻り値のデータ型を、parameterTypeで引数のデータ型を指定している。
その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-mybatis-xml/demo
要点まとめ
- MyBatisのSQL文をXMLファイルに配置する場合、XMLファイルは、resourcesフォルダ下のMapperインタフェースと同じディレクトリ下に配置する。
- XMLのmapperタグには、Mapperインタフェースのクラスパスを指定する。
- SQL文は、select, insert, update, deleteの各タグ内に記載し、idタグにMapperインタフェースのメソッド名を指定する。さらに、resultTypeで戻り値のデータ型を、parameterTypeで引数のデータ型を指定することができる。





