@Insert注解
@Insert 注解本身是简单的,但如果需要返回主键的值,情况会变得稍微复杂一些。
不需要返回主键
这个方法和 XML 中的 SQL 完全一样,这里不做特别介绍,代码如下。
@Insert({"insert into sys_role(id,role_name,enabled,create_by,create_time) " +
"values(#{id},#{roleName},#{enabled},#{createBy},#{createTime,jdbcType=TIMESTAMP})"})
void insert(SysRole sysRole);
返回自增主键
新增 insert2 方法,代码如下。
@Insert({"insert into sys_role(role_name,enabled,create_by,create_time) " +
"values(#{roleName},#{enabled},#{createBy},#{createTime,jdbcType=TIMESTAMP})"})
@Options(useGeneratedKeys = true,keyProperty = "id")
void insert2(SysRole sysRole);
和上面的 insert 方法相比,insert2 方法中的 SQL 中少了 id 一列,注解多了一个 @Options,我们在这个注解中设置了 useGeneratedKeys 和 keyProperty 属性,用法和 XML 相同,当需要配置多个列时,这个注解也提供了 keyColumn 属性,可以像 XML 中那样配置使用。
返回非自增主键
新增 insert3 方法,代码如下。
@Insert({"insert into sys_role(role_name,enabled,create_by,create_time) " +
"values(#{roleName},#{enabled},#{createBy},#{createTime,jdbcType=TIMESTAMP})"})
@SelectKey(statement = "select last_insert_id()",keyProperty = "id",resultType = Long.class,before = false)
void insert3(SysRole sysRole);
使用 @SelectKey 注解,以下代码是前面 XML 中配置的 selectKey。
<selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
select last_insert_id()
</selectKey>
来对比一下,配置属性基本上都是相同的,其中 before 为 false 时功能等同于 order="AFTER",before 为 true 时功能等同于 order="BEFORE"。
在不同的数据库中,order 的配置不同,大家可以参考前面 XML 中的内容,自行编写测试代码进行测试。