菏泽市网站建设_网站建设公司_Django_seo优化
2026/1/1 9:51:23 网站建设 项目流程

问题描述

在使用tk提供的InsertMapper的insert方法时,不会将自增ID回写到记录中。

问题复现

maven依赖

<dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version>
</dependency>

实体类

package com.imooc.commons.dao.entity;import lombok.Data;import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;@Data
@Table(name = "marketing_step_context")
public class MarketingStepContext {@Id@Column(name = "id")@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;/*** 上下文json*/@Column(name = "context_json")private String contextJson;@Column(name = "create_date")private Date createDate;@Column(name = "update_date")private Date updateDate;
}

mapper类

import com.imooc.commons.dao.entity.MarketingStepContext;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;@Repository
public interface MarketingStepContextMapper extends Mapper<MarketingStepContext>, MySqlMapper<MarketingStepContext> {
}

使用时

stepContextMapper.insert(stepContext); //id没有自动回写到stepContext中,导致后续更新时异常

问题原因

insert方法本身就不支持回写ID,对比insertList方法,它确实也没有 @Options注解。

解决方法

  1. 使用KeySql注解
@Id
@Column(name = "id")
@KeySql(useGeneratedKeys = true)
private Long id;
  1. 手动声明id生成器
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "JDBC")
private Long id;
  1. 使用insertList方法
stepContextMapper.insertList(Collections.singletonList(stepContext));

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询