mybatisは自己増加プライマリ・キーを返します
前言
本論文では,返すプライマリキーの結論のみを記録し,ソースコード解析を行わない.
結論
以下のinsertOrUpdateは、insert on duplicate key update+に@Paramを使用してインパラメータを注入する場合、任意の場合にkeyPropertyが使用する必要がある"@Paramのインパラメータ名である.プライマリ・キー・プロパティ名(entity.id)の形式で、パラメータ・オブジェクトに正しく解析してプライマリ・キー+バッチinsertを設定する場合、@Paramの注釈ではプライマリ・キーを返すことができないため、paramenterTypeは@Paramよりもリターン・プライマリ・キーに汎用性があります.+InsertOrUpdateの場合、selectKeyは挿入時のプライマリ・キーのみを正しく返すことができ、更新時のプライマリ・キーを正しく返すことができず、useGenerateKeysは挿入または更新時にプライマリ・キーを正しく返すことができます.したがって、insertOrUpdateではuseGeneratedKeyを使用します.+バッチinsertOrUpdateでは、いずれの場合もプライマリ・キーを正しく返すことができないため、プログラム・ロジックは返されるプライマリ・キーに依存することはできません.
じっこう挿入 一括挿入 を挿入または更新する.一括挿入または更新 リファレンスピット回避必見:詳細なMyBatisは、SQL文insert on duplicate key updateの自己増加プライマリ・キーの挿入または更新を含む自己増加プライマリ・キー実験を返す
本論文では,返すプライマリキーの結論のみを記録し,ソースコード解析を行わない.
結論
以下のinsertOrUpdateは、insert on duplicate key update+に@Paramを使用してインパラメータを注入する場合、任意の場合にkeyPropertyが使用する必要がある"@Paramのインパラメータ名である.プライマリ・キー・プロパティ名(entity.id)の形式で、パラメータ・オブジェクトに正しく解析してプライマリ・キー+バッチinsertを設定する場合、@Paramの注釈ではプライマリ・キーを返すことができないため、paramenterTypeは@Paramよりもリターン・プライマリ・キーに汎用性があります.+InsertOrUpdateの場合、selectKeyは挿入時のプライマリ・キーのみを正しく返すことができ、更新時のプライマリ・キーを正しく返すことができず、useGenerateKeysは挿入または更新時にプライマリ・キーを正しく返すことができます.したがって、insertOrUpdateではuseGeneratedKeyを使用します.+バッチinsertOrUpdateでは、いずれの場合もプライマリ・キーを正しく返すことができないため、プログラム・ロジックは返されるプライマリ・キーに依存することはできません.
じっこう
int insert(BoyEntity entity);
"insert" useGeneratedKeys="true" keyProperty="id" parameterType="BoyEntity">
insert into boy (`name`, created_time, modified_time)
values (#{name}, now(), now())
</insert>
int insertBatch(List entityList);
"insertBatch" useGeneratedKeys="true" keyProperty="id">
insert into boy (`name`, created_time, modified_time)
values
<foreach collection="list" item="entity" index= "index" separator =",">
(#{entity.name}, now(), now())
</foreach>
>
int insertOrUpdate(BoyEntity entity);
id="insertOrUpdateUseGeneratedKeys" useGeneratedKeys="true" keyProperty="id" parameterType="BoyEntity">
insert into boy (`name`, created_time, modified_time)
values (#{name}, now(), now())
on duplicate key update modified_time = now()
int insertOrUpdateBatch(List entityList);
id="insertOrUpdateBatch">
insert into boy (`name`, created_time, modified_time)
values
"list" item="entity" index= "index" separator =",">
(#{entity.name}, now(), now())
on duplicate key update modified_time = now()