今天的想法是,要在插入数据库时,如果有某某一个主要字段的值重复,则不插入,否则则插入!看了一下mybatis-Plus是有这个saveOrUpdate
方法!
原本使用save时是没有问题了,改成saveOrUpdate
用了一下就报错了。
com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: error: can not execute. because can not find column for id from entity!
就是这个mybatisPlus不能找到哪个是主键字段,因为这个saveOrUpdate
默认是根据主键执行操作的!
所有需要在原本的实体类的主键头上,打个@TableId
,如下,后面是对应数据库的字段,已经主键自动递增。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Subject {
@TableId(value = "subject_Code", type = IdType.AUTO)
private long subjectCode;
private String subjectNameCn;
private String subjectNameEn;
private String subjectHref;
private long subjectParentCode;
private long levelCode;
private int isDelete;
private long operateTimestamp;
}
不过还有个问题,就是这个是根据主键做操作的,但是我主键本来就是自动递增肯定不会有问题的,接下来就是想个办法,让他根据指定字段做操作,好像是有提供了一个口子。
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
我再去看一下怎么操作的!
研究尝试了半天,终于搞出来了,可能是很少有人会像我这样做吧!所以我自己尝试了下。
当saveOrUpdate
不使用条件构造器时,会先做根据主键查询,如果查出来的结