飞道的博客

Mybatis自定义insert语句返回自增长主键id[实例演示]

229人阅读  评论(0)

数据库环境: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">

 实例演示:


  
  1. /**
  2. * 角色添加
  3. *
  4. * @param roleAndMenuRequest
  5. * @return
  6. */
  7. @Transactional(propagation = Propagation.REQUIRES_NEW)
  8. @Override
  9. public BaseResponse saveRoleInfoAndMenuPer(RoleAndMenuRequest roleAndMenuRequest) {
  10. List<String> list = roleAndMenuRequest.getSysPermissions();
  11. SysRole sysRole = roleAndMenuRequest.getSysRole();
  12. if ((sysRole.getRoleName() == null || sysRole.getRoleName() == "")) {
  13. return ResponseUtil.getErrorByCodeEnum(ErrorCodeEnum.ROLE_NAME_IS_EMPTY);
  14. }
  15. QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
  16. //验证角色名是否重复
  17. queryWrapper.eq( "role_name", sysRole.getRoleName());
  18. List<SysRole> roleList = this.list(queryWrapper);
  19. if (roleList.size() != 0) {
  20. //角色名已使用,请重新填写
  21. return ResponseUtil.getErrorByCodeEnum(ErrorCodeEnum.ROLENAME_IS_REUSE);
  22. }
  23. //1、保存角色信息
  24. sysRole.setRoleStatus( 0);
  25. sysRoleMapper.addRole(sysRole);
  26. //2、保存用户菜单权限
  27. for (String per : list) {
  28. SysRolePermission sysRolePermission = new SysRolePermission();
  29. sysRolePermission.setRoleId(sysRole.getRoleId());
  30. sysRolePermission.setCreateTime(sysRole.getCreateTime());
  31. sysRolePermission.setPermissionCode(per);
  32. sysRolePermissionMapper.insert(sysRolePermission);
  33. }
  34. return ResponseUtil.getSuccessResponse(ErrorCodeEnum.ROLE_SAVE_SUCCESS.getMessage());
  35. }

  
  1. <insert id= "addRole" parameterType= "com.system.xiaoma.entity.SysRole" keyProperty= "roleId" useGeneratedKeys= "true">
  2. insert into sys_role (role_name,create_time,update_time,role_status)
  3. values (#{roleName},#{createTime},#{updateTime},#{roleStatus})
  4. </insert>

 debug给大家看一眼,看看能否获取自增长主键id;

 


❤如果文章对您有所帮助,就请在文章末尾的左下角把大拇指点亮吧!(#^.^#);

❤如果喜欢阿柴柴(笔名)分享的文章,就请给阿柴柴个关注吧!(๑′ᴗ‵๑)づ╭❤~;

❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】;

❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

❤版权声明:本文为博主原创文章,转载请附上原文出处链接和本文声明,版权所有,盗版必究!(*^▽^*).


转载:https://blog.csdn.net/weixin_43970743/article/details/116654947
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场