mysqlがMyBatisにデータを挿入し、自動インクリメントの主キーと非自動インクリメントの主キーを返す方法
MyBatisの挿入操作、データの挿入中に主キーを返す方法は?主キーが自動インクリメントの主キーである場合と、主キーが自動インクリメントされていない場合の2つのケースがあります。次に、2つのケースについて詳しく説明します。
MySQLは自動インクリメントの主キーをサポートしていますが、Oracleは自動インクリメントの主キーをサポートしていません。getGeneratedKeys()
メソッドを使用して、JDBCで自動インクリメントの主キーを取得できます。
自動インクリメントの主キーの値を取得します
- CompetitionMapper.javaのインターフェース
int createCompetition(Competition competition);
- CompetitionMapper.xmlでxmlを書く方法
<insert id="createCompetition" useGeneratedKeys="true" parameterType="com.ebusiness.reviewer.model.Competition" keyProperty="id">
insert into
competition
(id,c_name,start_time,end_time,create_time)
values
(default ,#{cname},#{startTime},#{endTime},NOW()})
</insert>
上記の使用法useGeneratedKeys="true"
は、自己インクリメント型の主キー取得戦略を使用してkeyProperty
、対応する主キー属性を指定することを意味します。つまり、MyBatisが主キーを取得した後、javaBeanのどの属性がこの値をカプセル化します。
- CompetitionService.javaのCompetitionMapper.javaのcreateCompetitionメソッドと、自己インクリメントする主キーを受け取る方法を呼び出します。
//competitionMapper是注入到容器中的CompetitionMapper对象,competition是传入的对象
competitionMapper.createCompetition(competition);
//id 就是自增主键
int id = competition.getId();
自動インクリメントしない主キーを取得する方法
<insert id="createCompetition" parameterType="com.ebusiness.reviewer.model.Competition">
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT uuid()
</selectKey>
insert into
competition
(id,c_name,start_time,end_time,create_time)
values
(#{id},#{cname},#{startTime},#{endTime},NOW())
</insert>
keyProperty:パラメータタイプの属性にクエリされた主キーを設定します。
順序:SQLステートメントの実行順序に関連して、BEFOREは挿入する前に主キーをクエリすることを意味します
。resultType:戻り値のタイプを指定します。
-
selectKeyタグでインクリメントしない主キーの値を照会し、それを挿入に挿入する主キーの値に割り当てます。
-
データベースデバッグモードの印刷ログ
-
メソッドを呼び出して非増分主キーを受け取った後
-
コンソールの印刷ログ