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

mybatis新增save结束后自动返回主键id详解

程序员文章站 2022-03-04 10:52:56
目录mybatis新增save结束后自动返回主键id1.使用场景2.原理在mybatis配置了mybatis或者mybatis-plus中save方法返回主键值1.mapper.xml中2.servi...

mybatis新增save结束后自动返回主键id

1.使用场景

save操作之前实体类中id为null,save之后自动返回带id的实体类

@override
    public chartpagepanel save(chartpagepanel entity) {
        userdetails user = securitycontextholder.getuserdetails();
        entity.setcreateuser(user.getusername());
        entity.setlastmodifyuser(user.getusername());
        //entity中的id为null
        chartpagepanelmapper.save(entity);
        //经过save操作后自动返回带id的entity
        // savepanelmanage(entity); 其中的entity带有id
        savepanelmanage(entity);
        return entity;
    }

    @transactional
    public void savepanelmanage(chartpagepanel entity){
        if(entity.getchartpagemanges()!=null && entity.getchartpagemanges().size()>0) {
            map<string, object> map = new hashmap<>();
            for (int i = 0; i < entity.getchartpagemanges().size(); i++) {
                int manageid = entity.getchartpagemanges().get(i).getid();
                map.put("manageid", manageid);
                map.put("panelid", entity.getid());
                chartpagepanelmanagemapper.save(map);
            }
        }
    }

2.原理在mybatis配置了

usegeneratedkeys=“true” keyproperty=“id”
<insert id="save" parametertype="com.centrin.generator.entity.chartpagepanel" usegeneratedkeys="true" keyproperty="id">
 insert into chart_page_panel
 (
        `parent_id`,
        `position`,
        `name`,
        `create_time`,
        `create_user`,
        `last_modify_time`,
        `last_modify_user`
        )
 values (
  #{parentid},
  #{position},
  #{name},
  now(),
  #{createuser},
  now(),
  #{lastmodifyuser}
  )
  </insert>

mybatis或者mybatis-plus中save方法返回主键值

1.mapper.xml中

方式:

usegeneratedkeys=“true” keyproperty=“id” keycolumn=“id”

解释:

在xml中定义usegeneratedkeys为true,返回主键id的值,keycolumn和keyproperty分别代表数据库记录主键字段和java对象成员属性名

<insert id="savebill" parametertype="com.jd.fp.mrp.domain.model.biz.adjustbillinfo"
        usegeneratedkeys="true" keyproperty="id" keycolumn="id">
        insert into adjust_bill_info(external_bill_id, warehouse_code, warehouse_name)
        values(#{externalbillid}, #{warehousecode}, #{warehousename});
</insert>

2.service或者dao中

注意:通过该种方式得到的结果是受影响的行数!!!!!

如果要获取主键id值,需要从传入的对象中获取!!!!!

long id = atranscationmapper.savebill(adjustbillinfo);
system.out.println("===========保存受影响的行数:"+id+"  保存的id值为:"+adjustbillinfo.getid());

输出结果展示:

===========保存受影响的行数:1 保存的id值为:191

mybatis-plus的insert后,返回主键id,直接通过传入的对象获取id即可!
bizapplicationformmapper.insert(form);
system.out.println("=============="+form.getid());

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