mybatis-plus的各种实战demo

mybatis-plus的使用详情

一、简介

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化

开发、提高效率而生。

二、创建并初始化数据库

1、创建数据库

mybatis_plus_db

2、创建User表结构如下

id name age email
1 Jone 18 [email protected]

三、新建一个springboot项目

1、引入依赖

<!--mybatis-plus-->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.0.5</version>
</dependency>

<!--mysql-->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<!--lombok用来简化实体类,idea需要安装lombok插件-->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

2、配置application.yml

server:
  port: 8088

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus_db?serverTimezone=GMT%2B8
    username: root
    password: root

3、在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹

4、创建实体类User

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

5、查看sql输出日志

#在application.yml里面配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

6、要想影响所有实体的配置,可以设置全局主键配置

mybatis-plus:
  global-config:
    db-config:
      id-type: id_worker  #类型可变

7、自动填充功能

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间更新时间等。

我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作

#在实体字段上添加下面注解
#插入时
@TableField(fill = FieldFill.INSERT)
private Date createTime;
#更新时
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;

1、配置config

设置统一处理类
package com.orange.mybatis_plus_demo.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
    @Override
    public void insertFill(MetaObject metaObject) {
            LOGGER.info("自动插入数据操作");
            this.setFieldValByName("createTime", new Date(), metaObject);
            this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        LOGGER.info("自动更新数据操作");
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

8、乐观锁

当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新

1、添加字段version

@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;

2、在7中的config配置

this.setFieldValByName("version", 1, metaObject);

3、在mybatis配置bean

@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
     /**
     * 乐观锁插件
     */
     @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
         return new OptimisticLockerInterceptor();
     }
}

9、分页使用

MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能

1、创建配置类在上面的config中添加

/* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}

2、测试分页查询

    @Test
    void testPage(){
        //1是当前页,5是查询的个数
        Page<User> page = new Page<>(1,5);
        IPage<User> userIPage = userMapper.selectPage(page, null);
        System.out.println(page.getCurrent());
        System.out.println(page.getPages());
        System.out.println(page.getSize());
        System.out.println(page.getTotal());
        System.out.println(page.hasPrevious());
        System.out.println(page.hasNext());
    }

10、逻辑删除的使用

1、在数据库中和实体中添加字段deleted

@TableLogic
@TableField(fill =  FieldFill.INSERT)
private Integer deleted;

2、在元数据配置新增添加

//默认未删除位0
this.setFieldValByName("deleted", 0, metaObject);

3、application.properties 加入配置

#默认的不用配置也可以
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

4、 MybatisPlusConfig 中注册 Bean

@Bean
public ISqlInjector sqlInjector() {
	return new LogicSqlInjector();
}

5、测试

#删除测试
@Test
public void testLogicDelete() {
	int result = userMapper.deleteById(1L);
	System.out.println(result);
}

10、sql性能测试

1、 MybatisPlusConfig 中配置

/**
* SQL 执行性能分析插件
* 开发环境使用,线上不推荐。 maxTime 指的是 sql 最大执行时长
*/
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
    PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
    performanceInterceptor.setMaxTime(100);//ms,超过此处设置的ms则sql不执行
    performanceInterceptor.setFormat(true);
    return performanceInterceptor;
}



2、在application.yml中设置

#设置为开发模式
spring.profiles.active=dev

#直接测试就可以了


项目demo地址

链接:https://pan.baidu.com/s/1myxCCQYzY2IgzBcPfzTwFw 
提取码:unub 
复制这段内容后打开百度网盘手机App,操作更方便哦

猜你喜欢

转载自blog.csdn.net/qq_38132995/article/details/113946543