使用MyBatis在mapper设置 useGeneratedKeys=“true” keyProperty=“id” 来获取自增长ID 是比较常见的配置
如下面配置
<insert id="save" useGeneratedKeys="true" keyProperty="id" parameterType="cn.domain.HrmRole" >
insert into HrmRoles(rolesmark,rolesname,subcompanyid)
values(
#{rolesmark},
#{rolesname},
#{subcompanyid}
)
</insert>
这种配置适合在使用 支持 主键自增长的数据库如 mysql、sqlserver时使用,而如果使用了比如oracle数据库则不能上述配置。
上述配置也有个前提,就是在实际数据库insert操作之后 数据库不要有类似 触发器等通过jdbc自身无法控制动作,否则会爆出以下错误
Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。
如果遇到上述问题可以通过 禁用触发表上绑定的触发器,或者使用第二种获取自增键的配置进行解决
<insert id="save" parameterType="cn.domain.HrmRole" >
<selectKey resultType="int" keyProperty="id" order="AFTER">
select @@IDENTITY as id
</selectKey>
insert into HrmRoles(rolesmark,rolesname,subcompanyid)
values(
#{rolesmark},
#{rolesname},
#{subcompanyid}
)
</insert>
创建成功后,最后返回的主键ID会被赋予到当前创建新纪录的对象中,可以通过 当前对象直接查看获取
public void createHrmRole(){
HrmRole hrmRole=new HrmRole();
hrmRole.setRolesmark("新的权限");
hrmRoleDao.save(hrmRole);
System.out.println(hrmRole.getId());
}