前言
在使用SpringCloud进行开发的时候,使用mybatis自动生成id,插入到数据库以后并把生成的这些id返回去以供其他使用
一、问题描述
但是发现发现 写入数据库的id和返回给实体的id并不相等
,如下所示:
-
插入到数据库后返回给实体的id
-
写入数据库的id
-
发现他们并不相等
-
xml
代码如下<insert id="saveColumnList" keyProperty="id"> INSERT INTO mcb_column(id,user_id, name, status,is_public) VALUES <foreach collection="list" item="item" separator=","> ('${@com.baomidou.mybatisplus.core.toolkit.IdWorker@getId()}', #{item.userId},#{item.name},#{item.status},#{item.isPublic}) </foreach> </insert>
其中的
'${@com.baomidou.mybatisplus.core.toolkit.IdWorker@getId()}'
就是使用IdWorker
工具生成分布式id,然而现在出现了问题,并不能满足我们的使用需求,那么该如何解决呢?
二、解决思路
既然可以在xml
文件里面调用IdWorker@getId()
这个方法生成id,那么我们同样可以在java代码里面调用这个方法生成id,然后把生成的id设置到实体属性里面,然后直接传递过来持久化进入数据库就行了,没有了再返回去给实体
的这个过程,就不会出现id不一样这种情况。
三、解决办法
在实例化实体的时候提前调用方法设置好id:
import com.baomidou.mybatisplus.core.toolkit.IdWorker;//注意导入的报名
Column column = new Column();
column.setId(IdWorker.getIdStr(column));//直接调用方法生成id,然后将id设置给实体
........//其他操作
//接下来其他操作需要使用这个实体的id的时候就可以直接通过 column.getId() 使用了