Mybatis自定义insert语句返回自增长主键id[实例演示]
Posted bug菌√
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis自定义insert语句返回自增长主键id[实例演示]相关的知识,希望对你有一定的参考价值。
数据库环境:mysql8.0
背景:当你需要在同一个实现类中执行多条sql,想必事务是一定会加的,那么,倘若就是要上一条insert sql的id 才能执行成功下边的update sql,怎么办,有什么办法能直接拿到这条数据的id,因为事务你没有最终commit 掉,所有的数据库修改都只是暂存,你就算去联合条件查询,也是徒劳;
所以mybatis就提供了useGeneratedKeys 和 keyProperty 属性,具体如何使用,请看下边解释。
如果最后觉得该文章对你有所帮助,还请不要吝啬你的赞哦,直接pia的点亮就完事了啦 up up up!!!
useGeneratedKeys:
取值范围:true|false 默认值是:false含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了。
keyProperty:
标记一个属性, MyBatis 会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。默认: 不设置。所示,我们在insert中指定了keyProperty="id",其中id代表插入的User对象的主键属性id(User对象中id名,非SQL字段名。User对象id对应SQL中主键字段)。
仅对 insert 有用。
<insert id="" parameterType="" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
实例演示:
/**
* 角色添加
*
* @param roleAndMenuRequest
* @return
*/
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
public BaseResponse saveRoleInfoAndMenuPer(RoleAndMenuRequest roleAndMenuRequest) {
List<String> list = roleAndMenuRequest.getSysPermissions();
SysRole sysRole = roleAndMenuRequest.getSysRole();
if ((sysRole.getRoleName() == null || sysRole.getRoleName() == "")) {
return ResponseUtil.getErrorByCodeEnum(ErrorCodeEnum.ROLE_NAME_IS_EMPTY);
}
QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
//验证角色名是否重复
queryWrapper.eq("role_name", sysRole.getRoleName());
List<SysRole> roleList = this.list(queryWrapper);
if (roleList.size() != 0) {
//角色名已使用,请重新填写
return ResponseUtil.getErrorByCodeEnum(ErrorCodeEnum.ROLENAME_IS_REUSE);
}
//1、保存角色信息
sysRole.setRoleStatus(0);
sysRoleMapper.addRole(sysRole);
//2、保存用户菜单权限
for (String per : list) {
SysRolePermission sysRolePermission = new SysRolePermission();
sysRolePermission.setRoleId(sysRole.getRoleId());
sysRolePermission.setCreateTime(sysRole.getCreateTime());
sysRolePermission.setPermissionCode(per);
sysRolePermissionMapper.insert(sysRolePermission);
}
return ResponseUtil.getSuccessResponse(ErrorCodeEnum.ROLE_SAVE_SUCCESS.getMessage());
}
<insert id="addRole" parameterType="com.system.xiaoma.entity.SysRole" keyProperty="roleId" useGeneratedKeys="true">
insert into sys_role (role_name,create_time,update_time,role_status)
values(#{roleName},#{createTime},#{updateTime},#{roleStatus})
</insert>
debug给大家看一眼,看看能否获取自增长主键id;
❤如果文章对您有所帮助,就请在文章末尾的左下角把大拇指点亮吧!(#^.^#);
❤如果喜欢阿柴柴(笔名)分享的文章,就请给阿柴柴个关注吧!(๑′ᴗ‵๑)づ╭❤~;
❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】;
❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);
❤版权声明:本文为博主原创文章,转载请附上原文出处链接和本文声明,版权所有,盗版必究!(*^▽^*).
以上是关于Mybatis自定义insert语句返回自增长主键id[实例演示]的主要内容,如果未能解决你的问题,请参考以下文章
mybatis返回自增主键的id,动态拼接查询语句,mysql创建新用户并授权相关表