数据库环境: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】;
❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);
❤版权声明:本文为博主原创文章,转载请附上原文出处链接和本文声明,版权所有,盗版必究!(*^▽^*).
转载:https://blog.csdn.net/weixin_43970743/article/details/116654947