06主键回写
常见需求,添加数据完后,需要获取刚刚添加数据的id
JDBC主键回写
主键自增
方式一
新增房屋数据
1.mapper接口
在插入节点上添加useGenerateKey属性,同时设置接收回传主键的属性,配置完成后,我们执行一个插入操作,插入时传入一个对象,插入完成后,这个对象的HouseId就会自动赋值,值就是刚刚插入成功的id值。
<!--
自增主键回写:方式一
keyProperty:指定对象哪个属性是主键
keyColumn:指定数据库的主键列名称
useGengerateKeys
-->
<insert id="add" parameterType="com.freshtest.mybatis.model.House" keyProperty="id" keyColumn="id">
INSERT INTO house(title,logo,price,area,district,city,create_time,update_time)
VALUES (
#{title},
#{logo},
#{price},
#{area},
#{district},
#{city},
#{createTime},
#{updateTime}
)
</insert>
方式二
数据库中 select last_insertId
<!--
自增主键回写:方式二
keyProperty:指定对象哪个属性是主键
keyColumn:指定数据库的主键列名称
resultType:主键的java数据类型
order:
AFTER: 在insert语句执行后再去获取主键的值,如:数据库主键为自增长的时候使用
BEFORE:在update语句执行前就去获取主键的值,如:数据库主键为UUID
-->
<insert id="add" parameterType="com.freshtest.mybatis.model.House" >
<selectKey keyProperty="id" keyColumn="id" resultType="java.lang.Integer" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO house(title,logo,price,area,district,city,create_time,update_time)
VALUES (
#{title},
#{logo},
#{price},
#{area},
#{district},
#{city},
#{createTime},
#{updateTime}
)
</insert>
主键
数据库自增长 mysql sqlserver
序列 db2、Oracle
UUID 字符串作为主键 select UUID();
<insert id="add" parameterType="com.freshtest.mybatis.model.HouseUUID" >
<!--
自增主键回写:方式二
keyProperty:指定对象哪个属性是主键
keyColumn:指定数据库的主键列名称
resultType:主键的java数据类型
order:
AFTER: 在insert语句执行后再去获取主键的值,如:数据库主键为自增长的时候使用
BEFORE:在update语句执行前就去获取主键的值,如:数据库主键为UUID
-->
<selectKey keyProperty="id" keyColumn="id" resultType="java.lang.String" order="BEFORE">
SELECT UUID()
</selectKey>
INSERT INTO house(id,title,logo,price,area,district,city,create_time,update_time)
VALUES (
#{id},
#{title},
#{logo},
#{price},
#{area},
#{district},
#{city},
#{createTime},
#{updateTime}
)
</insert>
本文介绍了Mybatis中主键回写的方法,包括JDBC的主键自增策略。详细讲解了两种方式:一是通过在mapper接口上设置useGenerateKey属性,自动将生成的主键值赋给对象;二是利用数据库的last_insertId函数获取新插入记录的ID。无论是在MySQL还是Oracle等数据库中,主键回写都是确保获取新添加数据ID的关键步骤。
663

被折叠的 条评论
为什么被折叠?



