mysqlがMyBatisにデータを挿入し、自動インクリメントの主キーと非自動インクリメントの主キーを返す方法

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タグでインクリメントしない主キーの値を照会し、それを挿入に挿入する主キーの値に割り当てます。

  • データベースデバッグモードの印刷ログ
    ここに画像の説明を挿入

  • メソッドを呼び出して非増分主キーを受け取った後
    ここに画像の説明を挿入

  • コンソールの印刷ログ
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_43941676/article/details/108699020