はじめに
Java言語で Database(DB)を利用する開発では、O/Rマッパーを利用することが多々あります。
規模にもよりますが、O/Rマッパーを利用する場合に準備・実装しなければならないのは、
- DAO(Data Access Object)クラス
- DTO(Data Transfer Object)クラス
- O/Rマッパーに渡す Mapping 定義ファイル
です。
ということで、今回はこれら必要なクラスを自動生成してくれる MyBatis Generator を紹介します。
本記事を記載する際に使用した環境は、以下のとおり。
eclipse | 2020-12 M1 (v4.18.0 M1) |
Spring Boot | v2.4.1 |
Database | H2 (local storage) |
MyBatis Generator | v1.4.0 |
eclipse のインストール方法が分からない方は、以下も合わせてお読みください。
こちらもCHECK
-
【手順】Javaの統合開発環境eclipseをダウンロード&インストール
ソフトウェアの開発を行うには、コードを実行する環境が必要です。Windowsで開発する場合、無料の開発環境「eclipse(エクリプス)」が超有名。今回は、Javaの統合開発環境「eclipse」のダウンロードから起動完了までを解説します。
続きを見る
語句説明
O/Rマッパー
オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法。(Wikipediaより)
MyBatis
MyBatis はJavaならびに.NET Frameworkで利用可能な、XMLまたはアノテーションを用いてストアドプロシージャやSQL文をオブジェクトと紐付ける永続性フレームワークである。(Wikipediaより)
DAO(Data Access Object)
Data Access Object(DAO)とは、ある種のデータベースや永続性機構の抽象化されたインタフェースを提供するオブジェクトであり、データベースの詳細を開示することなく特定の操作を提供。(Wikipediaより)
DTO(Data Transfer Object)
Data Transfer Object(DTO)はデザインパターンの一種で、アプリケーションソフトウェアのサブシステム間でデータを転送するのに使う。(Wikipediaより)
DDL(Data Definition Language)
SQLのデータ定義言語の文は関係データベースの構造を定義する。(Wikipediaより)
新規プロジェクトの作成
プロジェクト作成ウィザード
まずは eclipse で新規プロジェクトを作成します。
「ファイル」⇒「新規」⇒「その他」とたどっていきます。
プロジェクトの種類を選択
作成するプロジェクトの種類は「Spring スターター・プロジェクト」を選択し、
「次へ」をクリックします。
スポンサーリンク
プロジェクトの構成を設定
プロジェクト名は「demo」⇒「mybatis-demo」に変更(任意の名前でOK)、
プロジェクトの構成は「Maven」⇒「Gradle」に変更します。
プロジェクトの依存関係を設定
プロジェクトの依存関係は、以下の6つを選択します。(Textボックスから検索できます)
- Spring Boot DevTools
- Lombok
- MyBatis Framework
- Flyway Migration
- H2 Database
- Spring Web
スポンサーリンク
プロジェクト作成ウィザードの完了
最後のサイト情報は、特に変更の必要はありません。そのまま「完了」をクリック。
プロジェクト作成完了
依存関係を解決するため、必要なパッケージのダウンロードが行われます。
しばらくお茶を飲みながら待ちましょう。
以下のようなプロジェクトが作成されれば完了です。
H2 Database の設定
H2 Database の設定を「src/main/resources/application.properties」に行います。
1 2 3 4 5 |
spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:./h2db/sanachan.db spring.datasource.username=sa spring.datasource.password=dm |
H2 Database にテーブルを作成
次に、H2 Database にテーブルを作成します。
DDLファイルの作成
先ほどのフォルダ「src/main/resources」の下に「db.migration」という項目があります。
そこを右クリックして「V1____create_schema.sql」というファイルを作成しましょう。
ファイルの命名にルールがありますので、まずは同名で作成しましょう。
ファイル作成ウィザード
「db.migration」を右クリック⇒「新規」⇒「ファイル」を選択
新規ファイルの作成
作成するファイル名「V1____create_schema.sql」を入力します。
DLLの記述
作成したファイルにテーブルを作成するSQLを記述します。
1 2 3 4 5 6 7 8 |
CREATE TABLE BOOK ( id INTEGER NOT NULL AUTO_INCREMENT, title VARCHAR(255) NOT NULL, isbn VARCHAR(255) NOT NULL, PRIMARY KEY (id), CONSTRAINT UQ_BOOK_ISBN UNIQUE (isbn) ); |
スポンサーリンク
Javaアプリケーションを実行
この状態でいったん Java アプリケーションを実行します。
起動後、Flyway がDDL文を適用して H2 Database にテーブルを作成してくれます。
Java アプリケーションの実行
「com.example.demo」の項目を右クリックし、「実行」⇒「Java アプリケーション」を選択します。
FlywayがDDL適応した結果の確認
正常終了を確認したら、四角の赤ボタンを押下して Java アプリケーションを終了させましょう。
スポンサーリンク
MyBatis Generator のインストール
ようやく本命の「MyBatis Generator」をインストールします。
eclipse の「ヘルプ」⇒「マーケットプレース」から、「MyBatis」で検索してインストールします。
スポンサーリンク
MyBatis Generator Config の作成
MyBatis Generator が参照する設定ファイルを作成します。
generationConfig.xml ファイルの作成
「generationConfig.xml」ファイルを「src/main/resources」配下に作成しましょう。
generationConfig.xml の記述内容
作成直後は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 32 33 34 35 36 37 38 |
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="handsOnTables" targetRuntime="MyBatis3"> <!-- Connection Settings --> <jdbcConnection driverClass="org.h2.Driver" connectionURL="jdbc:h2:C:\Work\EclipseWork\mybatis-demo\h2db\sanachan.db" userId="sa" password="dm"> </jdbcConnection> <!-- Entity Models --> <javaModelGenerator targetPackage="com.example.demo.entity.domain" targetProject="mybatis-demo/src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- Sql Xml files --> <sqlMapGenerator targetPackage="com.example.demo.mybatis" targetProject="mybatis-demo/src/main/resources"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- Mappers --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.mybatis" targetProject="mybatis-demo/src/main/java"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- Target tables --> <table schema="" tableName="BOOK"> <property name="useActualColumnNames" value="true"/> <property name="mapUnderscoreToCamelCase" value="true" /> </table> </context> </generatorConfiguration> |
注意ポイント
connectionURL は、H2 Database ファイルのフルパスを入力する必要があります。
フルパスで指定しなかった場合、H2 Database を上手く参照できず、
「WARNING: Table configuration with schema null, and table XXXX did not resolve to any tables」
というワーニングが出て失敗します。
スポンサーリンク
MyBatis Generator の実行
実行構成の作成
eclipse のメニュー「実行」⇒「実行構成」を選択します。
実行構成の編集
「MyBatis Generator」をダブルクリックし、以下の項目を編集します。
- 名前:「mybatis-generator」を記述(任意の名前)
- 構成ファイルに先ほど作成した generationConfig.xml を選択
「ワークスペース」のボタンを押下して選択する
実行と実行結果
構成の編集が完了すると、画面中央に「mybatis-generator」が表示されます。(任意につけた名前)
これをダブルクリックすることで MyBatis Generator を実行することができます。
コンソールにWARNINGやERRORが出力されることなく「ビルド成功」と表示されると完了です。
以下のファイルが出来上がっていることが分かります。
- Book.java
- BookExample.java
- BookMapper.java
- BookMapper.xml
スポンサーリンク
自動生成されたファイルの中身(コメント除く)
DTO(Book.java)
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 |
package com.example.demo.entity.domain; public class Book { private Integer ID; private String TITLE; private String ISBN; public Integer getID() { return ID; } public void setID(Integer ID) { this.ID = ID; } public String getTITLE() { return TITLE; } public void setTITLE(String TITLE) { this.TITLE = TITLE == null ? null : TITLE.trim(); } public String getISBN() { return ISBN; } public void setISBN(String ISBN) { this.ISBN = ISBN == null ? null : ISBN.trim(); } } |
setter/getterが実装されており、オブジェクトをリストで扱うことでイテレーティブ処理が容易になります。
スポンサーリンク
DAO(BookMapper.java、BookExample.java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package com.example.demo.mybatis; import com.example.demo.entity.domain.Book; import com.example.demo.entity.domain.BookExample; import java.util.List; import org.apache.ibatis.annotations.Param; public interface BookMapper { long countByExample(BookExample example); int deleteByExample(BookExample example); int deleteByPrimaryKey(Integer ID); int insert(Book record); int insertSelective(Book record); List<Book> selectByExample(BookExample example); Book selectByPrimaryKey(Integer ID); int updateByExampleSelective(@Param("record") Book record, @Param("example") BookExample example); int updateByExample(@Param("record") Book record, @Param("example") BookExample example); int updateByPrimaryKeySelective(Book record); int updateByPrimaryKey(Book record); } |
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 |
package com.example.demo.entity.domain; import java.util.ArrayList; import java.util.List; public class BookExample { protected String orderByClause; protected boolean distinct; protected List<Criteria> oredCriteria; public BookExample() { oredCriteria = new ArrayList<>(); } public void setOrderByClause(String orderByClause) { this.orderByClause = orderByClause; } public String getOrderByClause() { return orderByClause; } public void setDistinct(boolean distinct) { this.distinct = distinct; } public boolean isDistinct() { return distinct; } public List<Criteria> getOredCriteria() { return oredCriteria; } public void or(Criteria criteria) { oredCriteria.add(criteria); } public Criteria or() { Criteria criteria = createCriteriaInternal(); oredCriteria.add(criteria); return criteria; } public Criteria createCriteria() { Criteria criteria = createCriteriaInternal(); if (oredCriteria.size() == 0) { oredCriteria.add(criteria); } return criteria; } protected Criteria createCriteriaInternal() { Criteria criteria = new Criteria(); return criteria; } public void clear() { oredCriteria.clear(); orderByClause = null; distinct = false; } protected abstract static class GeneratedCriteria { protected List<Criterion> criteria; protected GeneratedCriteria() { super(); criteria = new ArrayList<>(); } public boolean isValid() { return criteria.size() > 0; } public List<Criterion> getAllCriteria() { return criteria; } public List<Criterion> getCriteria() { return criteria; } protected void addCriterion(String condition) { if (condition == null) { throw new RuntimeException("Value for condition cannot be null"); } criteria.add(new Criterion(condition)); } protected void addCriterion(String condition, Object value, String property) { if (value == null) { throw new RuntimeException("Value for " + property + " cannot be null"); } criteria.add(new Criterion(condition, value)); } protected void addCriterion(String condition, Object value1, Object value2, String property) { if (value1 == null || value2 == null) { throw new RuntimeException("Between values for " + property + " cannot be null"); } criteria.add(new Criterion(condition, value1, value2)); } public Criteria andIDIsNull() { addCriterion("ID is null"); return (Criteria) this; } public Criteria andIDIsNotNull() { addCriterion("ID is not null"); return (Criteria) this; } public Criteria andIDEqualTo(Integer value) { addCriterion("ID =", value, "ID"); return (Criteria) this; } public Criteria andIDNotEqualTo(Integer value) { addCriterion("ID <>", value, "ID"); return (Criteria) this; } public Criteria andIDGreaterThan(Integer value) { addCriterion("ID >", value, "ID"); return (Criteria) this; } public Criteria andIDGreaterThanOrEqualTo(Integer value) { addCriterion("ID >=", value, "ID"); return (Criteria) this; } public Criteria andIDLessThan(Integer value) { addCriterion("ID <", value, "ID"); return (Criteria) this; } public Criteria andIDLessThanOrEqualTo(Integer value) { addCriterion("ID <=", value, "ID"); return (Criteria) this; } public Criteria andIDIn(List<Integer> values) { addCriterion("ID in", values, "ID"); return (Criteria) this; } public Criteria andIDNotIn(List<Integer> values) { addCriterion("ID not in", values, "ID"); return (Criteria) this; } public Criteria andIDBetween(Integer value1, Integer value2) { addCriterion("ID between", value1, value2, "ID"); return (Criteria) this; } public Criteria andIDNotBetween(Integer value1, Integer value2) { addCriterion("ID not between", value1, value2, "ID"); return (Criteria) this; } public Criteria andTITLEIsNull() { addCriterion("TITLE is null"); return (Criteria) this; } public Criteria andTITLEIsNotNull() { addCriterion("TITLE is not null"); return (Criteria) this; } public Criteria andTITLEEqualTo(String value) { addCriterion("TITLE =", value, "TITLE"); return (Criteria) this; } public Criteria andTITLENotEqualTo(String value) { addCriterion("TITLE <>", value, "TITLE"); return (Criteria) this; } public Criteria andTITLEGreaterThan(String value) { addCriterion("TITLE >", value, "TITLE"); return (Criteria) this; } public Criteria andTITLEGreaterThanOrEqualTo(String value) { addCriterion("TITLE >=", value, "TITLE"); return (Criteria) this; } public Criteria andTITLELessThan(String value) { addCriterion("TITLE <", value, "TITLE"); return (Criteria) this; } public Criteria andTITLELessThanOrEqualTo(String value) { addCriterion("TITLE <=", value, "TITLE"); return (Criteria) this; } public Criteria andTITLELike(String value) { addCriterion("TITLE like", value, "TITLE"); return (Criteria) this; } public Criteria andTITLENotLike(String value) { addCriterion("TITLE not like", value, "TITLE"); return (Criteria) this; } public Criteria andTITLEIn(List<String> values) { addCriterion("TITLE in", values, "TITLE"); return (Criteria) this; } public Criteria andTITLENotIn(List<String> values) { addCriterion("TITLE not in", values, "TITLE"); return (Criteria) this; } public Criteria andTITLEBetween(String value1, String value2) { addCriterion("TITLE between", value1, value2, "TITLE"); return (Criteria) this; } public Criteria andTITLENotBetween(String value1, String value2) { addCriterion("TITLE not between", value1, value2, "TITLE"); return (Criteria) this; } public Criteria andISBNIsNull() { addCriterion("ISBN is null"); return (Criteria) this; } public Criteria andISBNIsNotNull() { addCriterion("ISBN is not null"); return (Criteria) this; } public Criteria andISBNEqualTo(String value) { addCriterion("ISBN =", value, "ISBN"); return (Criteria) this; } public Criteria andISBNNotEqualTo(String value) { addCriterion("ISBN <>", value, "ISBN"); return (Criteria) this; } public Criteria andISBNGreaterThan(String value) { addCriterion("ISBN >", value, "ISBN"); return (Criteria) this; } public Criteria andISBNGreaterThanOrEqualTo(String value) { addCriterion("ISBN >=", value, "ISBN"); return (Criteria) this; } public Criteria andISBNLessThan(String value) { addCriterion("ISBN <", value, "ISBN"); return (Criteria) this; } public Criteria andISBNLessThanOrEqualTo(String value) { addCriterion("ISBN <=", value, "ISBN"); return (Criteria) this; } public Criteria andISBNLike(String value) { addCriterion("ISBN like", value, "ISBN"); return (Criteria) this; } public Criteria andISBNNotLike(String value) { addCriterion("ISBN not like", value, "ISBN"); return (Criteria) this; } public Criteria andISBNIn(List<String> values) { addCriterion("ISBN in", values, "ISBN"); return (Criteria) this; } public Criteria andISBNNotIn(List<String> values) { addCriterion("ISBN not in", values, "ISBN"); return (Criteria) this; } public Criteria andISBNBetween(String value1, String value2) { addCriterion("ISBN between", value1, value2, "ISBN"); return (Criteria) this; } public Criteria andISBNNotBetween(String value1, String value2) { addCriterion("ISBN not between", value1, value2, "ISBN"); return (Criteria) this; } } public static class Criterion { private String condition; private Object value; private Object secondValue; private boolean noValue; private boolean singleValue; private boolean betweenValue; private boolean listValue; private String typeHandler; public String getCondition() { return condition; } public Object getValue() { return value; } public Object getSecondValue() { return secondValue; } public boolean isNoValue() { return noValue; } public boolean isSingleValue() { return singleValue; } public boolean isBetweenValue() { return betweenValue; } public boolean isListValue() { return listValue; } public String getTypeHandler() { return typeHandler; } protected Criterion(String condition) { super(); this.condition = condition; this.typeHandler = null; this.noValue = true; } protected Criterion(String condition, Object value, String typeHandler) { super(); this.condition = condition; this.value = value; this.typeHandler = typeHandler; if (value instanceof List<?>) { this.listValue = true; } else { this.singleValue = true; } } protected Criterion(String condition, Object value) { this(condition, value, null); } protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { super(); this.condition = condition; this.value = value; this.secondValue = secondValue; this.typeHandler = typeHandler; this.betweenValue = true; } protected Criterion(String condition, Object value, Object secondValue) { this(condition, value, secondValue, null); } } public static class Criteria extends GeneratedCriteria { protected Criteria() { super(); } } } |
Mapping 定義ファイル(BookMapper.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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
<?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.mybatis.BookMapper"> <resultMap id="BaseResultMap" type="com.example.demo.entity.domain.Book"> <id column="ID" jdbcType="INTEGER" property="ID" /> <result column="TITLE" jdbcType="VARCHAR" property="TITLE" /> <result column="ISBN" jdbcType="VARCHAR" property="ISBN" /> </resultMap> <sql id="Example_Where_Clause"> <where> <foreach collection="oredCriteria" item="criteria" separator="or"> <if test="criteria.valid"> <trim prefix="(" prefixOverrides="and" suffix=")"> <foreach collection="criteria.criteria" item="criterion"> <choose> <when test="criterion.noValue"> and ${criterion.condition} </when> <when test="criterion.singleValue"> and ${criterion.condition} #{criterion.value} </when> <when test="criterion.betweenValue"> and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} </when> <when test="criterion.listValue"> and ${criterion.condition} <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> #{listItem} </foreach> </when> </choose> </foreach> </trim> </if> </foreach> </where> </sql> <sql id="Update_By_Example_Where_Clause"> <where> <foreach collection="example.oredCriteria" item="criteria" separator="or"> <if test="criteria.valid"> <trim prefix="(" prefixOverrides="and" suffix=")"> <foreach collection="criteria.criteria" item="criterion"> <choose> <when test="criterion.noValue"> and ${criterion.condition} </when> <when test="criterion.singleValue"> and ${criterion.condition} #{criterion.value} </when> <when test="criterion.betweenValue"> and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} </when> <when test="criterion.listValue"> and ${criterion.condition} <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> #{listItem} </foreach> </when> </choose> </foreach> </trim> </if> </foreach> </where> </sql> <sql id="Base_Column_List"> ID, TITLE, ISBN </sql> <select id="selectByExample" parameterType="com.example.demo.entity.domain.BookExample" resultMap="BaseResultMap"> select <if test="distinct"> distinct </if> <include refid="Base_Column_List" /> from BOOK <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> <if test="orderByClause != null"> order by ${orderByClause} </if> </select> <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from BOOK where ID = #{ID,jdbcType=INTEGER} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> delete from BOOK where ID = #{ID,jdbcType=INTEGER} </delete> <delete id="deleteByExample" parameterType="com.example.demo.entity.domain.BookExample"> delete from BOOK <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> </delete> <insert id="insert" parameterType="com.example.demo.entity.domain.Book"> insert into BOOK (ID, TITLE, ISBN ) values (#{ID,jdbcType=INTEGER}, #{TITLE,jdbcType=VARCHAR}, #{ISBN,jdbcType=VARCHAR} ) </insert> <insert id="insertSelective" parameterType="com.example.demo.entity.domain.Book"> insert into BOOK <trim prefix="(" suffix=")" suffixOverrides=","> <if test="ID != null"> ID, </if> <if test="TITLE != null"> TITLE, </if> <if test="ISBN != null"> ISBN, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="ID != null"> #{ID,jdbcType=INTEGER}, </if> <if test="TITLE != null"> #{TITLE,jdbcType=VARCHAR}, </if> <if test="ISBN != null"> #{ISBN,jdbcType=VARCHAR}, </if> </trim> </insert> <select id="countByExample" parameterType="com.example.demo.entity.domain.BookExample" resultType="java.lang.Long"> select count(*) from BOOK <if test="_parameter != null"> <include refid="Example_Where_Clause" /> </if> </select> <update id="updateByExampleSelective" parameterType="map"> update BOOK <set> <if test="record.ID != null"> ID = #{record.ID,jdbcType=INTEGER}, </if> <if test="record.TITLE != null"> TITLE = #{record.TITLE,jdbcType=VARCHAR}, </if> <if test="record.ISBN != null"> ISBN = #{record.ISBN,jdbcType=VARCHAR}, </if> </set> <if test="_parameter != null"> <include refid="Update_By_Example_Where_Clause" /> </if> </update> <update id="updateByExample" parameterType="map"> update BOOK set ID = #{record.ID,jdbcType=INTEGER}, TITLE = #{record.TITLE,jdbcType=VARCHAR}, ISBN = #{record.ISBN,jdbcType=VARCHAR} <if test="_parameter != null"> <include refid="Update_By_Example_Where_Clause" /> </if> </update> <update id="updateByPrimaryKeySelective" parameterType="com.example.demo.entity.domain.Book"> update BOOK <set> <if test="TITLE != null"> TITLE = #{TITLE,jdbcType=VARCHAR}, </if> <if test="ISBN != null"> ISBN = #{ISBN,jdbcType=VARCHAR}, </if> </set> where ID = #{ID,jdbcType=INTEGER} </update> <update id="updateByPrimaryKey" parameterType="com.example.demo.entity.domain.Book"> update BOOK set TITLE = #{TITLE,jdbcType=VARCHAR}, ISBN = #{ISBN,jdbcType=VARCHAR} where ID = #{ID,jdbcType=INTEGER} </update> </mapper> |
参考・引用