06Mybatis:主键回写

本文介绍了Mybatis中主键回写的方法,包括JDBC的主键自增策略。详细讲解了两种方式:一是通过在mapper接口上设置useGenerateKey属性,自动将生成的主键值赋给对象;二是利用数据库的last_insertId函数获取新插入记录的ID。无论是在MySQL还是Oracle等数据库中,主键回写都是确保获取新添加数据ID的关键步骤。

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>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值