Mybatis-plus插入

本文探讨了在MyBatis中使用if-else判断插入数据时遇到的问题:即使记录不存在仍返回已存在提示。文中详细介绍了问题排查过程及解决办法。

在使用mybatis插入时写了一个if-else语句来进行判断
如果不存在该项记录的话则插入
结果发现即使是通过插入得到 还是会返回exsits而不是返回success
实在是想不通

 public String closecourseapply(String kh, String gh, String xq) {
        //首先判断是不是已经提交过申请
        boolean flag=true;
        QueryWrapper<closeapply> wrapper=new QueryWrapper<>();
        wrapper.eq("xq",xq);
        wrapper.eq("gh",gh);
        wrapper.eq("kh",kh);
        Integer cnt=closeMapper.selectCount(wrapper);
        if(cnt==0)
       {
             flag=false;
             System.out.println("enter");
             closeapply apply=new closeapply();
             apply.setGh(gh);
             apply.setKh(kh);
             apply.setXq(xq);
             apply.setState(0);
             closeMapper.insert(apply);
         }
        if(flag)
        return "exsits";
        else
        return "success";
    }

又试了试发现 明明只有一条insert语句 但是还是会显示重复插入 也就是说不知道为什么只有这一条insert语句但是却执行了两次
具体原因不知道 但是参照
https://blog.youkuaiyun.com/qq_41490938/article/details/105611990
问题得到解决
十分感谢博主!

### MyBatis-Plus 插入操作后返回生成的 ID 的实现方式 MyBatis-Plus 提供了一种便捷的方式来处理实体类中的主键自动生成逻辑。当执行插入操作时,可以通过配置主键策略来确保生成唯一的主键值,并在插入成功后将其自动填充到对应的实体对象中。 #### 主键生成策略 MyBatis-Plus 支持多种主键生成策略,其中常用的有 `IdType.ASSIGN_ID` 和 `IdType.AUTO`[^1]: - **`IdType.ASSIGN_ID`**: 使用雪花算法(Snowflake Algorithm)生成唯一 ID,默认情况下会基于当前时间戳和机器码生成全局唯一标识符。 - **`IdType.AUTO`**: 数据库级别的自增主键,在支持该特性的数据库(如 MySQL)上生效。 如果选择了 `IdType.ASSIGN_ID` 或其他非数据库自增的方式,则需要手动设置工作节点(workId 和 dataCenterId),以防止分布式环境下的冲突问题[^2]。 #### 实现代码示例 以下是通过 MyBatis-Plus 配置并获取插入后的生成 ID 的具体方法: ```java import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; public class User { @TableId(type = IdType.ASSIGN_ID) // 设置主键生成策略为 ASSIGN_ID private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } // Service 层 @Service public class UserService extends ServiceImpl<UserMapper, User> { public boolean saveUser(User user) { boolean result = this.save(user); // 执行保存操作 System.out.println("Generated ID: " + user.getId()); // 获取生成的 ID return result; } } ``` 上述代码展示了如何利用 MyBatis-Plus 自动为主键赋值的功能。调用 `save()` 方法完成数据插入之后,可以立即访问实体对象的 `id` 字段以获得新生成的主键值。 #### 注意事项 为了应对可能存在的分布式环境下重复 ID 问题,建议开发者自行扩展或替换默认的 ID 生成器。例如,创建一个定制化的生成器类继承于 `IdentifierGenerator` 接口,并重写其 `nextId` 方法。 ```java @Component public class CustomIdentifierGenerator implements IdentifierGenerator { @Override public Number nextId(Object entity) { // 自定义业务逻辑生成唯一 ID return SnowFlakeUtil.generateUniqueId(); // 假设这是一个工具类方法 } } ``` 最后一步是在项目启动阶段注册这个新的生成器实例至 Spring 容器中以便框架能够识别它。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值