springboot整合Mybatis-plus

本文介绍了如何在IDEA中集成MyBatis-Plus并配置基础模型映射,包括主键策略、字段注解和分页插件。重点讲解了条件构造器QueryWrapper的使用和嵌套查询,同时涉及乐观锁和数据过滤的示例。
摘要由CSDN通过智能技术生成

通过IDEA基于springboot配置使用mybatis-plus

官网地址:
  https://mp.baomidou.com/guide/

MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。

首先需要在IDEA中安装Mybatis-pius的插件
在这里插入图片描述
然后在Maven中导入依赖
pom.xml

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.1.tmp</version>
</dependency>

配置完成,就是这么简单

相关类要继承mybatis-plus的baseXXX类
model:

@TableName("examinee_info")
public class ExamineeInfo extends BaseModel {

    private static final long serialVersionUID = 1L;

   
    @TableField("card_id")
    private String cardId;
    }

常用注解:
@TableName 】
@TableName 用于定义表名
注:
常用属性:
value 用于定义表名

	【@TableId】
	    @TableId                 用于定义表的主键
	注:
	    常用属性:
	        value           用于定义主键字段名
	        type            用于定义主键类型(主键策略 IdType)
	
	   主键策略:
	      IdType.AUTO          主键自增,系统分配,不需要手动输入
	      IdType.NONE          未设置主键
	      IdType.INPUT         需要自己输入 主键值。
	      IdType.ASSIGN_ID     系统分配 ID,用于数值型数据(Long,对应 mysql 中 BIGINT 类型)。
	      IdType.ASSIGN_UUID   系统分配 UUID,用于字符串型数据(String,对应 mysql 中 varchar(32) 类型)。
	
	【@TableField】  
	    @TableField            用于定义表的非主键字段。
	注:
	    常用属性:
	        value                用于定义非主键字段名
	        exist                用于指明是否为数据表的字段, true 表示是,false 为不是。
	        fill                 用于指定字段填充策略(FieldFill)。
	        
	    字段填充策略:(一般用于填充 创建时间、修改时间等字段)
	        FieldFill.DEFAULT         默认不填充
	        FieldFill.INSERT          插入时填充
	        FieldFill.UPDATE          更新时填充
	        FieldFill.INSERT_UPDATE   插入、更新时填充。
	
	【@TableLogic】
	    @TableLogic           用于定义表的字段进行逻辑删除(非物理删除)
	注:
	    常用属性:
	        value            用于定义未删除时字段的值
	        delval           用于定义删除时字段的值
	        
	【@Version】
	    @Version             用于字段实现乐观锁

Mapper:

public interface ExamineeInfoMapper extends BaseMapper<ExamineeInfo> {

}

service:

@Service
public class ExamineeInfoService extends BaseService<ExamineeInfoMapper, ExamineeInfo> {
}

controller:

@Controller
public class ExamineeInfoController extends BaseController<ExamineeInfoService, ExamineeInfo, ExamineeInfoMapper> {
}

mybatis-plus封装了大量方法
在这里插入图片描述操作mybatis-plus的重点就是条件构造器QueryWrapper
在这里插入图片描述
例如

@PostMapping("/myUpdate")
    public ResponseWrapper myUpdate(@RequestBody ExamineeSubmitReview examineeSubmitReview){
        examineeSubmitReview.setExamineeReviewFormUrl(null);
        return ResponseWrapper.success(examineeSubmitReviewService.update(examineeSubmitReview,new QueryWrapper<ExamineeSubmitReview>().eq(ExamineeSubmitReview.EXAMINEE_ID,examineeSubmitReview.getExamineeId())));
    }

难点 and 嵌套

ExamineeInfo examineeInfo = examineeInfoMapper.selectOne(
                        new QueryWrapper<ExamineeInfo>().eq(ExamineeInfo.ID, examineeSubmitReview.getExamineeId())
                        .and(params.getExamineeName()!=null,
                                Wrapper->Wrapper.like(ExamineeInfo.CARD_ID,params.getExamineeName())
                                        .or()
                                        .like(ExamineeInfo.PHONE_NUMBER,params.getExamineeName())
                                        .or()
                                .like(ExamineeInfo.EXAMINEE_NAME,params.getExamineeName())
                        )
                );

Mybatis-Plus分页
配置分页插件。
  编写一个 配置类,内部使用 @Bean 注解将 PaginationInterceptor 交给 Spring 容器管理。

@EnableTransactionManagement
@Configuration
@MapperScan("com.cvit.emb_archives.dao")
public class MybatisPlusConfig {


    /**
     * 分页插件 攻击 SQL 阻断解析器 多租户 SQL 解析器
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

例如

public Map pageList(ExamineeInfo params, PageRequest pageInfo){
        Map map=new HashMap(16);
        List<ExamineeInfo> infoList=new ArrayList<>();
        Page page=new Page(pageInfo.getPageIndex(),pageInfo.getPageSize());
        Page page1=examineeSubmitReviewMapper.selectPage(page,
                new QueryWrapper<ExamineeSubmitReview>().ne(ExamineeSubmitReview.EXAMINEE_OPERATION_TRANSCRIPT_URL," ")
                        .and(wrapper->wrapper.ne(ExamineeSubmitReview.EXAMINEE_THEORY_RECORD_FORM_URL," ")
                )

        );
        List<ExamineeSubmitReview> reviewList=page1.getRecords();
        for(ExamineeSubmitReview examineeSubmitReview:reviewList) {
                ExamineeInfo examineeInfo = examineeInfoMapper.selectOne(
                        new QueryWrapper<ExamineeInfo>().eq(ExamineeInfo.ID, examineeSubmitReview.getExamineeId())
                        .and(params.getExamineeName()!=null,
                                Wrapper->Wrapper.like(ExamineeInfo.CARD_ID,params.getExamineeName())
                                        .or()
                                        .like(ExamineeInfo.PHONE_NUMBER,params.getExamineeName())
                                        .or()
                                .like(ExamineeInfo.EXAMINEE_NAME,params.getExamineeName())
                        )
                );

                if(examineeInfo!=null)infoList.add(examineeInfo);

        }
        map.put("records",infoList);
        map.put("total",page1.getTotal());

        return map;
    }

乐观锁的实现
配置乐观锁插件。
  编写一个配置类(可以与上例的分页插件共用一个配置类),将 OptimisticLockerInterceptor 通过 @Bean 交给 Spring 管理。

/*
     *
     * 乐观锁实现方式:
     *
     * 取出记录时,获取当前version
     * 更新时,带上这个version
     * 执行更新时, set version = newVersion where version = oldVersion
     * 如果version不对,就更新失败
     * 支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
     * 仅支持 updateById(id) 与 update(entity, wrapper) 方法
     * 在 update(entity, wrapper) 方法下, wrapper 不能复用!!!
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值