解决Mybatis-Plus的联合主键问题

时间:2025-03-16 07:50:02

场景:使用-plus进行批量新增或更新操作时,发现后台日志只根据一个主键进行更新,实体类将两个主键都加上@TableId时,运行报错。

解决:引入了,下面贴出解决代码

实体类(主要是将@TableId都改为@TableFiled,并将主键字段加上@MppMultiId注解)

package ;

import ;

import ;

import ;

import ;

import ;

import ;

import ;
import ;
import ;

import ;

/**
 * <p>
 * 视图头设定表
 * </p>
 *
 * @author wangshuai1
 * @since 2022-03-03
 */
@TableName("dc_view_header_user")
@ApiModel(value = "DcViewHeaderUser对象", description = "用户视图头设定表")
public class DcViewHeaderUser implements Serializable{

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "主键id")
    @MppMultiId
    @TableField("RECORDID")
    private String recordid;

    @ApiModelProperty(value = "用户id")
    @MppMultiId
    @TableField("USER_ID")
    private String userId;
}

Mapper(改为继承MppBaseMapper)

package ;

import ;
import ;
import ;
import ;

import ;

/**
 * <p>
 * 视图头设定表	 Mapper 接口
 * </p>
 *
 * @author wangshuai1
 * @since 2022-03-03
 */
@Repository
public interface DcViewHeaderUserMapper extends MppBaseMapper<DcViewHeaderUser> {



}

Service(继承IMppService)

package ;

import ;
import ;
import ;

/**
 * <p>
 * 视图头设定表	 服务类
 * </p>
 *
 * @author wangshuai1
 * @since 2022-03-03
 */
public interface DcViewHeaderUserService extends IMppService<DcViewHeaderUser> {
    /**
}

实现类(继承MppServiceImpl)

package ;

import ;
import ;
import ;
import ;

import ;
import ;
import ;
import ;
import ;
import ;
import ;
import org.;
import org.;
import ;
import ;
import ;
import ;
import ;

import ;
import ;
import .*;
import ;
import ;
import ;
import ;

/**
 * <p>
 * 视图头设定表	 服务实现类
 * </p>
 *
 * @author wangshuai1
 * @since 2022-03-03
 */
@Service
public class DcViewHeaderUserServiceImpl extends MppServiceImpl<DcViewHeaderUserMapper, DcViewHeaderUser> implements DcViewHeaderUserService {

}

最后,记得项目的运行类需要加上@EnableMPP,开启MPP

@SpringBootApplication
//开启事务
@EnableTransactionManagement
//开启定时器
@EnableScheduling
@ServletComponentScan
@MapperScan(value = {".**.dao"}, nameGenerator = )
//扫描包下bean,自定义BeanName生成策略, 解决不同包下同名类问题
@ComponentScan(basePackages = {""}, nameGenerator = )
@EnableAsync   //开启异步注解功能
//支持MPP
@EnableMPP
public class BDPWebApplication extends SpringBootServletInitializer {

}