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文の記載をこのプログラムから削除している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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」の内容は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?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で引数のデータ型を指定することができる。