springboot整合Mybatis-plus

一、准备

1.创建项目及添加依赖

	<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

2.编写配置文件

server:
  port: 8081
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/education_online?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
    #   数据源其他配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j2
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.创建实体类

package com.sxs.pojo;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.mybatis.spring.annotation.MapperScan;

import java.util.Date;


@Data
@NoArgsConstructor
@AllArgsConstructor
//当实体类名称与数据库表名不一致性时的映射关系
@TableName("edu_user")
public class User {
//    目的是在不指定id的情况下,对数据库中的id进行自动填充
//    ID_WORKER 雪花算法(生成19位long类型的数字)
//    ID_WORKER_STR 雪花算法(生成19位的String类型的字符串)
//    AUTO 自动填充
//    INPUT 手动输入
//    NONE 手动输入
//    UUID 随机数UUID
    @TableId(type= IdType.ID_WORKER)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

4.创建DAO接口

@Component
public interface UserDao extends BaseMapper<User> {

}

二、SELETC/INSERT/UPDATE实例

    //查询User表中的所有数据
    @Test
    void contextLoads() {
        List<User> users = userDao.selectList(null);
        for (User user : users) {
            System.out.println(user);
        }
    }
    //添加新用户
    @Test
    void addUser(){
        User user=new User();
        user.setName("九九");
        user.setAge(25);
        user.setEmail("445.@qq.com");
        int insert = userDao.insert(user);
        System.out.println(insert);
    }
    //根据ID修改内容
    @Test
    void updateUser(){
        User user=new User();
        user.setId(1L);
        user.setAge(30);
        user.setName("阿里巴巴");
        int i = userDao.updateById(user);
        System.out.println(i);
    }
    //根据ID修改内容
    @Test
    void updateUserId(){
        UpdateWrapper<User> userUpdateWrapper=new UpdateWrapper<>();
        userUpdateWrapper.eq("id","1419118742381592578");
        User user=new User();
        user.setAge(30);
        int i = userDao.update(user,userUpdateWrapper);
        System.out.println(i);
    }

三、Mybatis-plus的自动填充

1.在所需填充实体类属性上添加注解

@TableField(fill = FieldFill.INSERT)
//INSERT:在使用INSERT操作时进行填充
//INSERT_UPDATE:在使用INSERT和UPDATE时进行填充
//UPDATE:在使用UPDATE时进行填充
//DEFAULT:不填充

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

2.自定义自动填充内容

创建自动填充类,并实现 MetaObjectHandler 接口;

@Component
public class MyMeateObjectHander implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

3.逻辑删除

1、编写配置文件

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

2、实体类上添加注解

@TableLogic

注:在mybatis-plus 3.1.1版本之后不需要添加config配置类信息,但是需要在启动类上添加注解:
@MapperScan("com.xxx"),或使用下面的方法

4.配置文件

在添加分页或乐观锁插件的同时进行了扫描

@MapperScan("com.sxs.dao")
@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
		//乐观锁
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
		//分页
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
posted @ 2021-08-08 15:45  __先森  阅读(73)  评论(0编辑  收藏  举报