mybatis 插入返回主键

本文详细解析了 MyBatis 中 SelectKey 标签的使用方法及其与 insert 操作的配合流程,介绍了 keyProperty 和 order 属性的作用。

先贴代码

<insert id="addPageContent" parameterType="com.sitech.dbs.busi.ProdPortalVisual.model.PortalPageContent">
		<selectKey keyProperty="contentId" resultType="int"
			order="BEFORE">
			 select TB_CMS_PAGE_CONTENT_SEQ.NEXTVAL as contentId from DUAL
		</selectKey>
		insert into TB_CMS_PAGE_CONTENT(content_id,catalog_id,module_content,adv_content,menu_content)
		values(#{contentId},#{catalogId},#{moduleContent},#{advContent},#{menuContent})
	</insert>
重点是selectkey标签,其中keyProperty属性指定selectKey返回的值赋予哪个属性,若parameterType是map,则会在map中插入该属性,若为对象,则修改对象该属性值,order属性有before和after,指定改selectKey是在insert前或后执行
### MyBatis 插入操作后回显主键的方法 当执行 `INSERT` 操作时,MyBatis 支持通过多种方式获取新生成的主键值。具体实现取决于所使用的数据库类型以及 ID 生成策略。 对于支持自动增长类型的数据库(如 MySQL),可以通过 `<selectKey>` 元素定义来捕获插入记录后的自增主键: ```xml <insert id="insertUser" parameterType="com.example.User"> <selectKey keyProperty="id" resultType="int" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO users (name, age) VALUES (#{name}, #{age}) </insert> ``` 上述 XML 片段展示了如何利用 `<selectKey>` 来设置实体类中对应的字段属性 `keyProperty` 和预期的数据类型 `resultType`[^4]。 如果采用的是 Spring Boot 结合 MyBatis Generator 自动生成代码的方式,则可以在 Java 方法签名处声明返回类型为整数或者受影响行数,并确保 Mapper 接口方法能够接收并传递这个值给业务逻辑层处理[^1]。 另外,在某些情况下,也可以借助于 JDBC 的 `getGeneratedKeys()` 功能直接从 PreparedStatement 获取刚插入数据产生的主键值;这种方式不需要额外编写 SQL 查询语句即可完成相同功能[^2]。 #### 使用示例 下面是一个完整的例子展示怎样在一个 RESTful API 中保存日志条目并将新分配的请求 ID 返回给客户端: ```java @ResponseBody @RequestMapping(value = "/record", method = RequestMethod.POST) public Msg saveLogs(@RequestBody Record record){ // 执行前打印对象状态 System.out.println("Before Insert:" + record); // 调用 Service 层进行持久化存储 recordService.insertRecord(record); // 此刻 reqId 已经被填充了实际数值 int id = record.getReqId(); System.out.println("After Insert Req Id is :" + id ); return Msg.success().add("id", id); } ``` 此代码片段说明了在调用了 `insertRecord` 后,`reqId` 字段已经被正确设置了新的唯一标识符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值