1. 如果使用的数据库支持自动生成主键(如:MySQL 和 SQL Server),那么您就可以简单地将 useGeneratedKeys 设置为”true”,然后使用 keyProperty 设置你希望自动生成主键的字段就可以了。
例如,如果 Author 表使用一个字段自动生成主键,那么配置语句就可以修改为:
<insert id="insertAuthor" parameterType="domain.blog.Author" useGeneratedKeys=”true” keyProperty=”id”> insert into Author (username,password,email,bio) values (#{username},#{password},#{email},#{bio}) </insert>
<insert id="insertSelective" parameterType="com.sankuai.meituan.waimai.domain.WmBdButler"
useGeneratedKeys="true" keyProperty="id" >
对于useGeneratedKeys和keyProperty属性的说明如下图:
2. MyBatis 还有另外一种方式为不支持自动生成主键的数据库及 JDBC 驱动来生成键值,下面展示一个能够随机生成 ID 的例子(也许你不会这么做,这仅仅是演示 MyBatis 的功能,文档的词语,意思像是说至于你做不做,反正我做了):
<selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" >
SELECT LAST_INSERT_ID()
</selectKey>
<selectKey keyProperty="id" resultType="java.lang.integer" order="BEFORE">
注意:上面的语句中标红的文字,添加了selectKey标签,首先解释如下图:
正如上面的解释我们只要把握住order的设置,在sql语句执行前(BEFORE)或者执行后(AFTER),执行selectKey 语句来获得主键就可以了,如上面例子selectKey首先执行,生成随机的主键,这时候Author对象中的id首先被赋值了,然后才会调用insert 语句。这相当于在您的数据库中自动生成键值,不需要编写复杂的 java 代码。
当然,是否需要配置<selectKey>根据情况,只要能保证记录有主键即可,一旦配置了<selectKey>,就可以在执行插入操作时获取到新增记录的主键。
注意:如果没有配置<selectKey>那么保存后的对象的主键依旧为null。
参考:https://www.cnblogs.com/tv151579/archive/2013/03/11/2954841.html