Skip to content

Commit

Permalink
楽観ロック対応のタスクに正規表現の説明を追記
Browse files Browse the repository at this point in the history
  • Loading branch information
kenjiyoshid-a committed Jan 14, 2025
1 parent 6b7aa75 commit 5784889
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions samples/web-csr/dressca-backend/infrastructure/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,72 @@ tasks.named('test') {
bootJar.enabled = false
jar.enabled = true

/*
正規表現と置換のペアをリストにまとめて置き換えを行うことで楽観ロックに対応する。
置き換えのペアは更新対象の検索方法が Example と PrimaryKey のどちらを利用するかで異なる。
◇ Example で検索するメソッドの例( updateByExampleSelective の場合)
検索対象
1. <update id="updateByExampleSelective" から #{row.楽観ロック制御を行う列名} の直前まで
2. #{row.楽観ロック制御を行う列名,jdbcType=楽観ロック制御を行う列のDB上のデータ型}
置換文字列
3. 楽観ロック制御を行う列名 = CURRENT_TIMESTAMP
操作
1 の直後に 3 を置いて、 2 は挿入しない。
〇 置換前
<update id="updateByExampleSelective" parameterType="map">
<set>
<if test="row.rowVersion != null">
row_version = #{row.rowVersion,jdbcType=TIMESTAMP},
</if>
</set>
</update>
〇 置換後
<update id="updateByExampleSelective" parameterType="map">
<set>
<if test="row.rowVersion != null">
row_version = CURRENT_TIMESTAMP,
</if>
</set>
</update>
◇ PrimaryKey で検索するメソッドの例( updateByPrimaryKey の場合)
Example の置き換えに加えて以下を行う。
検索対象
1. <update id="updateByPrimaryKey" から </update> の直前まで
2. </update>
置換文字列
3. and 楽観ロック制御を行う列名 = #{エンティティに変換した際の楽観ロック制御を行う列名,jdbcType=楽観ロック制御を行う列のDB上のデータ型}
操作
1 、3、 2 の順に並び替える。
※二重で置換が起きないように、検索条件に置換する文字列が含まれる場合は置き換えを行わないように制御する。
〇 置換前
<update id="updateByPrimaryKey" parameterType="com.dressca.infrastructure.repository.mybatis.generated.entity.CatalogItemEntity">
update catalog_items
set name = #{name,jdbcType=VARCHAR},
row_version = #{rowVersion,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=BIGINT}
</update>
〇 置換後
<update id="updateByPrimaryKey" parameterType="com.dressca.infrastructure.repository.mybatis.generated.entity.CatalogItemEntity">
update catalog_items
set name = #{name,jdbcType=VARCHAR},
row_version = CURRENT_TIMESTAMP
where id = #{id,jdbcType=BIGINT}
and row_version = #{rowVersion,jdbcType=TIMESTAMP}
</update>
*/
task updateMyBatisGeneratorMapperForOptimisticLocking {
doLast {

Expand Down

0 comments on commit 5784889

Please sign in to comment.