您的位置:

在MyBatis中正确返回主键id

一、使用JDBC方式返回主键id

在MyBatis中,我们可以通过使用keyProperty和useGeneratedKeys属性实现在执行插入操作时返回主键id。但是,这种方式适用于支持JDBC 3.0或更高版本,并且我们必须使用支持自动键生成的数据库。

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> 
    insert into user (username, password, phone) values (#{username}, #{password}, #{phone}) 
</insert>

上述示例代码中,我们通过keyProperty="id"指定了返回id值,并且useGeneratedKeys="true"告诉MyBatis使用自动生成的主键值。

二、使用Mapper接口方法返回主键id

除了使用JDBC方式返回主键id,我们还可以通过Mapper接口方法实现。具体做法是在Mapper接口中定义一个返回主键id的方法,并在对应的XML映射文件中实现该方法。

例如,我们可以在UserMapper接口中定义以下方法:

int addUser(User user);

在XML映射文件中,我们可以使用selectKey元素实现返回主键id。如下所示:

<insert id="addUser" parameterType="User">
    insert into user (username, password, phone) values
    (#{username}, #{password}, #{phone})
    <selectKey keyProperty="id" order="AFTER" resultType="Long">
        select LAST_INSERT_ID()
    </selectKey>
</insert>

上述示例代码中,我们在插入操作完成后,使用<selectKey>元素获取插入的主键值,并将其赋值给keyProperty="id"指定的属性。

三、使用@Options注解返回主键id

在MyBatis 3.4.2及以后的版本中,我们还可以使用@Options注解实现返回主键id。具体做法是在Mapper接口方法上添加@Options注解,并指定对应属性值即可。

例如,在UserMapper接口中,我们可以添加以下注解:

@Insert("insert into user (username, password, phone) values (#{username}, #{password}, #{phone})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int addUser(User user);

上述示例代码中,我们使用@Options注解指定useGeneratedKeys = true告诉MyBatis使用自动生成的主键值,并指定keyProperty和keyColumn属性分别指定返回主键值的属性和数据库表中主键id的列名。

四、小结

以上是在MyBatis中正确返回主键id的三种常用方法。我们可以根据实际情况选择合适的方式,并通过合理的配置来提高代码的可维护性和可读性。