您的位置:

Mybatis新增返回主键

一、Mybatis返回主键介绍

Mybatis是一个非常受欢迎的Java持久层框架。对于我们来说,新增数据是数据库操作中最常见的操作之一。而在Mybatis中,我们通常需要获取到插入数据的主键以便于后续业务操作。所以了解Mybatis中如何获取新增数据的主键是非常有必要的。

二、Mybatis获取新增主键方式

Mybatis提供了三种简单的获取新增主键的方式,即使用selectKey、useGeneratedKeys、select @@identity。下面我们将详细介绍这三种方式。

1. selectKey

在Mybatis中,selectKey是一种标准的获取主键的方式。我们可以通过在<insert>标签中添加<selectKey>标签来获取新增记录的主键。 具体用法如下例子所示:

    <insert id="insertUser" parameterType="com.example.model.User">
        insert into user(name, age)
        values(#{name}, #{age})
        <selectKey resultType="java.lang.Integer" keyProperty="id">
            select last_insert_id() as id
        </selectKey>
    </insert>

上面的示例中,我们使用了<selectKey>标签来获取新增记录的主键。这里我们可以看到<selectKey>标签有三个属性:resultType、keyProperty和order。其中resultType指定了返回类型,keyProperty指定了要填充的实体类属性,而order则指定了SQL语句执行的顺序。

2. useGeneratedKeys

除了使用selectKey标签,Mybatis还提供了另外一种获取主键的方式,那就是使用useGeneratedKeys。需要注意的是,使用该方式需要在<insert>标签中设置useGeneratedKeys="true"和keyProperty。 具体用法如下例子所示:

    <insert id="insertUser" parameterType="com.example.model.User"
            useGeneratedKeys="true" keyProperty="id">
        insert into user(name, age)
        values(#{name}, #{age})
    </insert>

在上面的示例中,我们使用了useGeneratedKeys属性来获取自增主键。这里需要注意的是useGeneratedKeys属性需要设置为true才能生效,并且keyProperty需要指定要填充的实体类属性。

3. select @@identity

如果使用的数据库是SQL Server或者Sybase等支持@@identity函数的数据库,那么我们还可以使用该函数来获取新增记录的主键。 具体用法如下例子所示:

    <insert id="insertUser" parameterType="com.example.model.User">
        insert into user(name, age)
        values(#{name}, #{age})
        select @@identity as id
    </insert>

在上面的示例中,我们在<insert>标签的最后添加了select @@identity语句来获取自增主键。需要注意的是,使用该方式要求数据库必须支持@@identity函数,否则会出现错误。

三、Mybatis获取主键的最佳实践

虽然Mybatis提供了多种获取自增主键的方式,但是我们应该选择最适合自己的方式来获取主键。对于大部分情况而言,我们建议使用useGeneratedKeys来获取主键,该方式简单易用并支持多个主键的返回。如果我们使用的数据库不支持自增主键,那么我们可以使用selectKey来获取主键。

四、完整实例代码

下面是一个完整的Mybatis新增返回主键的示例代码。

    <insert id="insertUser" parameterType="com.example.model.User"
            useGeneratedKeys="true" keyProperty="id">
        insert into user(name, age)
        values(#{name}, #{age})
    </insert>

使用上面的代码,我们可以简单地实现新增数据并返回自增主键的功能。需要注意的是,在使用该功能时务必保证数据库支持自增主键操作。