MySQL MyBatis,如何获取插入语句的自动生成键?


<!–

–>

MySQL MyBatis,如何获取插入语句的自动生成键?

在MySQL数据表中,通常情况下我们插入一条新数据时,需要自动生成一个唯一的键值作为该数据的标识。而在使用MyBatis进行数据库操作时,如何获取这个自动生成的键值呢?

阅读更多:

1. 使用<selectKey>标签

在MyBatis中,我们可以使用<selectKey>标签来获取插入操作中自动生成的键值,该标签通常需要与<insert>标签进行配合使用。下面是一个示例代码:

(adsbygoogle = window.adsbygoogle || []).push({});

<insert id="insertNewData" parameterType="com.example.Data">
  insert into data(name, content)
  values(#{name}, #{content})
  <selectKey resultType=".lang.Long" keyProperty="id" order="AFTER">
    select last_insert_id()
  </selectKey>
</insert>

上述代码中,我们使用

标签来获取插入数据后自动生成的主键值,并将其赋值给Java对象中的id属性。其中,resultType属性用于指定查询结果的返回类型,keyProperty属性用于指定将查询结果赋值给Java对象中的哪个属性,而order属性用于指定查询语句的执行顺序(在insert语句之后执行)。

2. 使用JDBC的getGeneratedKeys方法

除了使用<selectKey>标签之外,我们还可以使用JDBC的getGeneratedKeys方法来获取插入操作中自动生成的键值。下面是一个示例代码:

Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(, Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, data.getName());
pstmt.setString(2, data.getContent());
pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();
if(rs.next()) {
  long id = rs.getLong(1);
  data.setId(id);
}
rs.close();
pstmt.close();
conn.close();

上述代码中,我们首先获取数据库连接并创建PreparedStatement对象,并在调用prepareStatement方法时将第二个参数设置为Statement.RETURN_GENERATED_KEYS。之后,我们执行插入操作并通过getGeneratedKeys方法获取自动生成的键值,最后将其赋值给Java对象中的id属性。

总结

在使用MyBatis进行数据库操作时,获取插入语句的自动生成键值是一个常见的需求。我们可以通过使用

标签或者JDBC的getGeneratedKeys方法来实现这一功能。无论使用哪种方法,都需要注意指定正确的返回类型和赋值属性,以及在适当的时候关闭相关资源。