mybatis之insert返回pkid,添加重复

一、添加数据返回该数据的主键

dao,entity,实体都不改变,只需要在mapper中加属性。

<insert id="replace" parameterType="参数类型"
          useGeneratedKeys="true" keyProperty="pkid">
    insert into 表名 (字段1,字段2)
    values (对应值1,对应值2)
</insert>
useGeneratedKeys="true":给主键设置自增长
keyProperty="pkid" :将自增长后的主键赋值给实体类中的pkid

二、添加数据重复问题

当添加数据的时候难免会有重复,一般insert写法会报错:on duplicate key update

insert还有一种特殊的用法,出现重复的数据不报错,只是添加记录数为0

insert ignore into 表名(字段名1,字段名2) values(对应值1,对应值2);

三、官方文档-selectKey方式

官方文档原话:这里有一个简单(甚至很傻)的示例,它可以生成一个随机 ID(你最好不要这么做,但这里展示了 MyBatis 处理问题的灵活性及其所关心的广度)。

可以使用 select LAST_INSERT_ID() 来实现递增,从0开始

<insert id="insertAuthor">
  <selectKey keyProperty="id" resultType="int" order="BEFORE">
    select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
    /* select LAST_INSERT_ID() 从0开始滴 */
  </selectKey>
  insert into Author
    (id, username, password, email,bio, favourite_section)
  values
    (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>

四、多行插入

<insert id="insert" useGeneratedKeys="true"
    keyProperty="实体对象标识(如果数据库和实体中的对象不一致,容易混淆)">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>

dao层,@Param("list")对应这边的collection="list",item是循环的第一个对象

五、添加与更新同时存在--INSERT ... ON DUPLICATE KEY UPDATE语法

官网:语法官宣

<insert id="inserUpdate" parameterType="全类名" useGeneratedKeys="true" keyProperty="pkid">
        insert into 表名
			(字段Int,字段string,字段日期)
		values
		(#{pkid,jdbcType=INTEGER},#{linkUrl,jdbcType=VARCHAR},#{createDate,jdbcType=DATE})
        ON DUPLICATE KEY UPDATE
		update_user = #{对应类中的属性名,jdbcType=INTEGER},update_date = now(),
		<if test="urlName != null and urlName != ''">url_name = #{类中的成员变量,jdbcType=VARCHAR},</if>
		<if test="mTagId != null and mTagId != ''">m_tag_id = #{类中的属性名,jdbcType=VARCHAR}</if>
    </insert>

也可以循环

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis中,insert操作默认情况下是不返回实体的。但是可以通过配置来实现返回实体。可以使用`useGeneratedKeys`和`keyProperty`属性来实现返回实体的功能。 `useGeneratedKeys`属性用于指定是否使用数据库生成的主键值,设置为`true`表示使用数据库生成的主键值。 `keyProperty`属性用于指定将主键值封装到实体类的哪个属性中。 例如,在MyBatis的配置文件或Mapper接口的方法中,可以设置`useGeneratedKeys="true"`和`keyProperty="userId"`来实现返回实体的功能。这样,在插入数据后,MyBatis会自动将生成的主键值赋值给实体类的相应属性。 引用中的代码示例中,`@PostMapping("/addUser")`方法可以通过将返回类型设置为`User`,并在`userService.insertUser(user)`之后,返回`user`对象,从而实现返回实体的功能。 请注意,具体的配置和代码可能会因项目而异,需要根据实际情况进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java--Mybatisinsert一条记录之后将主键ID返回给实体对象](https://blog.csdn.net/MinggeQingchun/article/details/119154244)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值