问题背景:
在项目中,需要实现动态表单的功能,所以无法通过维护PO的方式直接完成记录的增删改查,所以通过mybatis原生的动态sql的方式,传入表名等完成crud。
其中要求增加数据的时候需要返回新增的记录主键id。
mybatis-plus实现方式
mybatis-plus对数据的增删改查有了良好的API封装,针对上述的需求,直接使用以下代码即可完成:
this.baseMapper.insert(govOperLogPO);
govOperLogPO.getId(); // 获取插入的自增主键
mybatis实现方式
mybatis需要通过编写xml文件,完成自增id的映射。
mapper中定义的插入语句函数,其中有两个参数:插入数据map,表名tableName
* 插入数据
*
* @param record 记录以map的方式 key:列名,value内容
* @param tableName
* @return
*/
Integer insertOneRecord(@Param("record") Map<String, Object> record, @Param("tableName") String tableName);
xml中定义的sql,有两种方式:
- 方式1:SELECT LAST_INSERT_ID(),注意selectKey中的keyProperty参数,该参数表示返回值映射到参数的具体位置,record.id表示将返回的id值放置到上述定义的record中的id key下,即record.put(“id”, value), 如果record是个j实体对象,即相当于record.setId(value).
<insert id="insertOneRecord">
insert into ${tableName}
<foreach collection="record" separator="," close=")" open="(" index="key" item="val">
<if test="val != null">
`${key}`
</if>
</foreach>
values
<foreach collection="record" separator="," close=")" open="(" index="key" item="val">
<if test="val != null">
#{val}
</if>
</foreach>
<selectKey resultType="int" order="AFTER" keyProperty="record.id">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
- 方式2: insert中增加参数 useGeneratedKeys=“true”,
<insert id="insertOneRecord" useGeneratedKeys="true" keyProperty="record.id">
insert into ${tableName}
<foreach collection="record" separator="," close=")" open="(" index="key" item="val">
<if test="val != null">
`${key}`
</if>
</foreach>
values
<foreach collection="record" separator="," close=")" open="(" index="key" item="val">
<if test="val != null">
#{val}
</if>
</foreach>
</insert>