欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mybatis-plus 执行insert(),实体的id自动更新问题

程序员文章站 2022-03-10 13:19:30
目录mybatis-plus 执行insert(),实体的id自动更新业务代码运行结果mybatis-plus的insert遇到的坑添加时id值不存在异常在实体类 id上面加一个注解这样即可mybat...

mybatis-plus 执行insert(),实体的id自动更新

mybatis-plus 在执行basemapper.insert()的时候,会将传进去的实体的id自动更新为插入的主键值。

业务代码

@transactional(rollbackfor = exception.class)
@override
public string savecourseinfo(courseinfoform courseinfoform) {
        //保存课程基本信息
        course course = new course();
        course.setstatus(course.course_draft);
        beanutils.copyproperties(courseinfoform, course);
        system.out.println("执行insert之前的id值:" + course.getid());
        basemapper.insert(course);
        system.out.println("执行insert之后的id值:" + course.getid());
        //保存课程详情信息
        coursedescription coursedescription = new coursedescription();
        coursedescription.setdescription(courseinfoform.getdescription());
        coursedescription.setid(course.getid());
        coursedescriptionmapper.insert(coursedescription);
        return course.getid();
}

运行结果

执行insert之前的id值:null
creating a new sqlsession
registering transaction synchronization for sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@6911ef9a]
jdbc connection [hikariproxyconnection@2133325606 wrapping com.mysql.cj.jdbc.connectionimpl@5e4ceb08] will be managed by spring
==> preparing: insert into edu_course ( id, teacher_id, subject_id, subject_parent_id, title, price, lesson_num, cover, status, gmt_create, gmt_modified ) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
==> parameters: 1417099738586558466(string), 1189426464967995393(string), 1416677134608371713(string), 1416677134537068547(string), linux操作系统(string), 199(bigdecimal), 32(integer), https://guli-file1-wang.oss-cn-beijing.aliyuncs.com/cover/2021/07/19/c5c453cc-0cdb-4c01-a2fc-3973bfe295fa.jpg(string), draft(string), 2021-07-19 20:31:20.777(timestamp), 2021-07-19 20:31:20.777(timestamp)
<== updates: 1
releasing transactional sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@6911ef9a]
执行insert之后的id值:1417099738586558466

所以说,在业务需要存储信息到多个表并且记录的id是一一对应的时候,就可以利用这个特性。而没有必要去执行sql语句查询id值。

mybatis-plus的insert遇到的坑

添加时id值不存在异常

我在添加的时候,无缘无辜的给我报

java.sql.sqlexception: field 'id' doesn't have a default value

如图:

mybatis-plus 执行insert(),实体的id自动更新问题

后来了解到 使用 mybatis-plus的insert方法,在底层会默认生成一个long类型的uuid,这就导致跟数据库里面类型不一致导致错误,我们首先要做的是要把这个默认自增的主键给禁了

在实体类 id上面加一个注解

@tableid(value = "id",type = idtype.input)
private string id;

这样即可

@data
public class jtbtransactionrecord extends model<jtbtransactionrecord> implements serializable{
    private static final long serialversionuid = 1l;
    /**
     * 交易主键
     */
    @tableid(value = "id",type = idtype.input)
    private string id;
}

大功告成。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。