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各语句高级用法

mybatis返回自增主键的id,动态拼接查询语句,mysql创建新用户并授权相关表

mybatis insert 返回主键 的before 和after的区别

mycat 主键自增问题

Mybatis返回插入的主键

使用mybatis插入自增主键ID的数据后返回自增的ID