记录一次 Mybatis plus使用baseMapper插入一条数据并返回id

本文介绍了如何使用Java的Spring框架实现在Service层中操作`T_***`表的FlowEntity实例,包括创建、保存FlowEntity对象,如设置属性并调用Mapper进行插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实体类代码:

@Data
@TableName("T_***")
public class Flow*** implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private int id;

    @LengthForUtf8(max = 50)
    private String name;

    @NotNull
    @LengthForUtf8(max = 100)
    private String processDefinitionId;

service层代码:

@Service
public class FlowEntityServiceImpl extends ServiceImpl<FlowEntityMapper, FlowEntity> implements FlowEntityService{

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void save(){

        FlowEntity flowentity = new FlowEntity();
       
        flowentity.setCcToVos(listStrings);
        flowentity.setCreateBy(userId);
        flowentity.setCreateTime(new Date());
        baseMapper.insert(flowentity);
    }
}

### MyBatis Plus 批量插入时只返回一条 ID 的解决方案 在使用 MyBatis Plus 进行批量插入操作时,如果遇到只有第一条记录返回 ID 的问题,可以通过调整插件配置以及 SQL 注入器来解决问题。以下是详细的分析和解决办法: #### 1. **MyBatis Plus 插入机制** MyBatis Plus 默认提供了 `saveBatch` 方法用于批量插入数据。然而,默认情况下该方法可能无法满足某些复杂的需求,例如需要获取每条记录对应的自增主键 ID[^3]。 #### 2. **问题原因** 当调用 `saveBatch` 或其他类似的批量插入方法时,如果发现只有第一条记录能够正常返回其自增 ID,则可能是由于以下原因之一造成的: - 数据库驱动程序未正确处理多条记录插入返回各自的结果集。 - 配置不当或者使用数据库版本较低,导致无法支持批量插入后的主键回显功能[^5]。 #### 3. **解决方案** ##### (1) 使用分批插入逻辑 通过手动实现分批次插入可以有效规避因单次插入过多而导致的各种异常情况。具体做法如下所示: ```java public boolean saveBatchWithId(List<T> list, int batchSize){ if(CollectionUtils.isEmpty(list)){ return false; } AtomicInteger count = new AtomicInteger(); List<List<T>> partitionList = Lists.partition(list,batchSize); for(List<T> subList : partitionList){ baseMapper.insertBatchSomeColumn(subList); // 自定义分批插入方法 count.addAndGet(subList.size()); } return count.get() == list.size(); } ``` 上述代码片段展示了如何利用 Java 中的工具类对原始列表进行分割,逐部分执行插入操作[^2]。 ##### (2) 调整全局配置项 确保项目中的 mybatis-config.xml 文件已开启 useGeneratedKeys 属性设置为 true 指定 keyProperty 参数指向实体对象内的主键字段名。例如: ```xml <insert id="batchInsert" useGeneratedKeys="true" keyProperty="id"> INSERT INTO table_name(column_1,column_2,...) VALUES <foreach collection="list" item="item" separator=","> (#{item.column1}, #{item.column2}) </foreach> </insert> ``` 同时还需要确认 jdbcUrl 是否包含 autoReconnect=true&useSSL=false 等参数以增强连接稳定性[^4]。 ##### (3) 替换默认 SqlInjector 实现类 为了进一步提升性能与兼容性,建议替换掉原有的 DefaultSqlInjector 类型为 OptimizedSqlInjector 。这样不仅可以减少不必要的 sql 构建开销还能更好地适配不同场景下的业务需求。 --- ### 总结 综上所述,针对 MyBatis Plus 批量插入过程中仅能成功取得首条记录对应主键值的情况,推荐采取以上三种措施之一或组合应用它们来进行修正优化。最终目的是让整个流程既高效又稳定地完成所有待写入的数据映射关系建立工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dengrz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值