Mybatis Plus插入数据后获取新数据id值的踩坑记录

目录
  • 问题描述:
  • 解决方法:
  • 总结

问题描述:

Mybatis Plus的insert方法,按说插入数据后会自动返回id

mapper方法:

@DS("wxuser")
@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {

}

业务类:

		@Autowired
		UserInfoMapper userInfoMapper;

		UserInfo user = new UserInfo();
        user.setAddress(userInfo.getAddress());
        user.setAge(userInfo.getAge());
        user.setMobile(userInfo.getMobile());
        user.setCreateTime(new Date());
        user.setUpdateTime(new Date());
        // 此num是指的插入数据成功的条数
        int num = userInfoMapper.insert(user);
        //如果想要获取插入数据的id,需要:user.getUserId();
        int id = user.getUserId();

这样按说是可以的,但是我这里仍然获取不到,所以需要再修改。

解决方法:

修改后mapper类:

@DS("wxuser")
@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {
    int saveUserInfo(@Param("userInfo")UserInfo userInfo);
}

在resources目录中新建mapper目录,创建UserInfoMapper.xml文件:

注意三个值:

useGeneratedKeys=“true”

说明:允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。

(仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。

keyProperty=“userInfo.userId”

说明:keyProperty中对应的值是实体类的属性,而不是数据库的字段

keyColumn=“userId”

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wx.user.mapper.UserInfoMapper">

    <insert id="saveUserInfo" useGeneratedKeys="true" keyProperty="userInfo.userId" keyColumn="userId">
        insert into userInfo (userNick,userName,password,isdelete,address,mobile)  values (#{userInfo.userNick},#{userInfo.userName},#{userInfo.password},#{userInfo.isDelete},#{userInfo.address},#{userInfo.mobile})
    </insert>

</mapper>

application.yml文件中:

# Mybatis Plus
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false # 设置字段不使用下划线方式
  global-config:
    db-config:
      id-type: AUTO
      table-underline: false # 设置表名字不使用下划线方式
  mapper-locations: classpath*:/mapper/**/*.xml

修改后的业务类:

		@Autowired
		UserInfoMapper userInfoMapper;

		UserInfo user = new UserInfo();
        user.setAddress(userInfo.getAddress());
        user.setAge(userInfo.getAge());
        user.setMobile(userInfo.getMobile());
        user.setCreateTime(new Date());
        user.setUpdateTime(new Date());
        // 此num是指的插入数据成功的条数
        int num = userInfoMapper.saveUserInfo(user);
        //如果想要获取插入数据的id,需要:user.getUserId();
        int id = user.getUserId();

这样就可以获取到新插入数据的id值了

总结

到此这篇关于Mybatis Plus插入数据后获取新数据id值的文章就介绍到这了,更多相关Mybatis Plus获取新数据id值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mybatis-Plus 新增获取自增列id方式

    目录 新增获取自增列id 1.实体类定义 2.解决办法 3.调用方法获取id说明 解决id自增方法 新增获取自增列id 1.实体类定义 注意:@TableId(value = “id”, type = IdType.AUTO)注解中的 type = IdType.AUTO 属性标注主键为自增策略. import lombok.Data; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatispl

  • mybatis-plus添加数据时id自增问题及解决

    目录 mybatis-plus添加数据时id自增问题 解决方案 插入记录的主键自增赋值机制说明 代码说明 1.找到执行入口 2.看看keyGenerator的执行逻辑 3. 跟进逻辑执行 4.继续进入下一层逻辑 5.继续进入下一层逻辑 6.关键取值 7.关键赋值 自增主键 UUID mybatis-plus添加数据时id自增问题 mybatis-plus插入数据,id自增列变的很长.比如下图: mybatis-plus中遇到一个,添加数据到数据库,而数据库中的id列是自增列 使用plus中自带的

  • Mybatis-plus全局id生成策略详解

    Mybatis-plus全局id生成策略 在配置文件中加入以下代码后就不需要在实体类种的id上添加 @TableId(value = "id", type = IdType.AUTO) mybatis-plus:   global-config:     db-config:       id-type: auto #设置主键自动生成策略(全局id生成策略) Mybatis-plus6种主键生成策略小结 /** * 数据库ID自增,数据库需要支持主键自增(如MySQL),并设置主键自增

  • Mybatis Plus插入数据后获取新数据id值的踩坑记录

    目录 问题描述: 解决方法: 总结 问题描述: Mybatis Plus的insert方法,按说插入数据后会自动返回id mapper方法: @DS("wxuser") @Mapper public interface UserInfoMapper extends BaseMapper<UserInfo> { } 业务类: @Autowired UserInfoMapper userInfoMapper; UserInfo user = new UserInfo(); us

  • 一览画面点击复选框后获取多个id值的方法

    在web开发中经常会遇到一览画面中每一条记录前都带一个复选框,点击后选中该条记录进行删除.修改.查看等操作. 修改和查看都是获取一条记录的id值后传递到后台进行查询获取该记录对象的各种属性值,再显示到画面上. 我说的重点是选中多条记录后进行批量删除,如何获取多条记录的id值是问题的关键.首先是在jsp页面中全选中复选框的方法. 代码如下: function checkEvent(name, allCheckId) { var allCk = document.getElementById(all

  • iOS手动添加新字体的步骤和踩坑记录

    目录 前言 字体添加 1.引入字体文件 2.配置 Info.plist 文件 3.解决添加新字体不生效问题 4.代码中设置字体 总结 前言 最近在一个日记软件,发现系统的默认字体过于丑陋,于是有了更改应用字体的想法.完成操作的过程中踩了一些小坑,写下此文记录一下,希望能对后人有所帮助. 字体添加 1.引入字体文件 直接将下载好的字体文件拖入项目中 2.配置 Info.plist 文件 在 Info.plist 文件中添加新行 "Fonts provided by application"

  • MybatisPlus中插入数据后获取该对象主键值的实现

    实体对象 主键IdType要设置为AUTO 表示数据库ID自增 @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class Employee implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) priv

  • 详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 id 的值呢? 一:使用 last_insert_id() SELECT LAST_INSERT_ID(); 1. 每次 mysql 的 query 操作在 mysql 服务器上可以理解为一次"原子"操作, 写操作常常需要锁表, 这里的锁表是 mysql 应用服务器锁表不是我们的应用程序锁表

  • Mybatis批量插入返回插入成功后的主键id操作

    我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签属性. 2.不支持生成自增主键的数据库:使用<selectKey>. 但是怎么对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少. Mybatis官网资料提供如下: First, if your database supports auto-generated key

  • Mybatis执行插入语句后并返回主键ID问题

    目录 1.MySQL数据库设置ID自增情况 2.使用UUID自增主键 3.mybatis-plus在执行插入语句后返回自定义ID 总结 我们知道JDBC可以实现插入语句后返回主键Id,那mybatis可以实现吗? 答案是肯定的. 1.MySQL数据库设置ID自增情况 <insert id="insertUser" parameterType="com.crush.mybatisplus.entity.User"> INSERT INTO tb_user

  • Mybatis之Select Count(*)的获取返回int的值操作

    本文将介绍,SSM中mybatis 框架如何获取Select Count(*)返回int 的值. 1. Service 代码: public boolean queryByunitclass(String unitclass, String unitsubclass) throws Exception { int count = matceMachineUnitMapper.queryByunitclass(unitclass, unitsubclass); if (count > 0) { r

  • 解决SpringBoot框架因post数据量过大没反应问题(踩坑)

    此处网上最多的做法是需要修改tomcat的参数配置大致如下: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="8443" URIEncoding="UTF-8" maxThreads="3000" compression="on" compress

  • Mybatis plus多租户方案的实战踩坑记录

    目录 (一).方案 (二).官方多租户的方案的优化和坑 1.分析哪些需要加多租户,哪些不需要加 2.jsqlparser 这个包与pagehelper 版本不对 3.sql解析失败 4.忽略多租户不生效 总结 公司的老项目要改造多租户,于是进入了大坑,本文写点遇到的坑以及解决方案,每次遇到问题在网上搜了好久,记录下来,防止以后忘掉. (一).方案 网上有很多方案,本文只写最后一种,即:表增加租户id,实现数据隔离 方案一:增加租户id,在每一个mapper调用的地方,都手工加上租户id 例如:

随机推荐