代码编织梦想

Mybatis plus笔记



前言

Mybatis plus学习笔记


一、Mybatis plus介绍

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。Mybatis plus官网

二、创建Spring Boot工程

1.工程依赖 pom.xml

        <!-- mybatis plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

2.数据源配置 Application.yml

server:
  port: 8081

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 88888888
    url: jdbc:mysql://localhost:3306/cargo_managment?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
此配置是用于打印sql语句的,mybatis plus默认不打印sql语句

3.mysql student表

create table student(
    id int(8) primary key ,
    name varchar(10) ,
    age int(3)
);

4.创建Student实体类

package com.example.mybayisplus.entity;

import lombok.Data;

/**
 * @author 权哥
 * @version 1.0
 * @date 2022/9/18 14:43
 */
@Data
public class Student {
    private long id;
    private String name;
    private long age;

}

5.创建Mapper接口

package com.example.mybayisplus.Mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybayisplus.entity.Student;

/**
 * @author 权哥
 * @version 1.0
 * @date 2022/9/18 14:47
 */
public interface StudentMapper extends BaseMapper<Student> {
}

6. 测试

package com.example.mybayisplus;

import com.example.mybayisplus.Mapper.StudentMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
class MybayisplusApplicationTests {

    @Autowired
    private StudentMapper studentMapper;
    @Test
    void contextLoads() {
        studentMapper.selectList(null).forEach(System.out::println);

    }

}

7.结果

在这里插入图片描述

三、Mybayis plus常用注解

1.@TableName

@Data
@TableName(value = "student")
public class Class {
    private long id;
    private String name;
    private long age;

}

当实体类的名字与数据库的名字不一致时,通过@TableName注解来映射数据库的表名。(Mybatis plus 默认以实体类名称首字母小写与数据库表名进行映射)

2.@TableId

设置主键映射,value映射主键字段名,type设置主键类型,主键的生成策略
例:

@Data
public class Student {
    @TableId(type = IdType.NONE)
    private long id;
    private String student_name;
    private long age;

}
描述
AUTO数据库自增
NONEMP set 主键。雪花算法实现
INPUT需要开发者手动赋值
ASSIFN_IDMP 分配ID、Long、Integer、String
ASSIGN_UUID分配UUID,String

在这里插入图片描述

3.@TableField

(1)@TableField(value = “name”)

@Data
public class Student {
    private long id;
    @TableField(value = "name")
    private String student_name;
    private long age;

}

当数据库表中属性名称与实体类属性名称不一致时,可以通过@TableField注解来完成实体类属性与数据库属性的映射,同时要注意数据类型、长度等是否匹配。

(2)@TableField(exist = false)

@Data
public class Student {
    private long id;
    private String name;
    private long age;
    @TableField(exist = false)
    private int a;

}

exist表示是否为数据库字段,如果实体类中的成员变量在数据库中没有对应的字段,则可使用exist=false

(3) @TableField(select = false)

@Data
public class Student {
    private long id;
    private String name;
    @TableField(select = false)
    private long age;
    
}

select表示是否查询该字段

(4) @TableField(fill = FieldFill.INSERT)& @TableField(fill = FieldFill.INSERT_UPDATE)

@Data
public class Student {
    private long id;
    private String name;
    private long age;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

@TableField(fill = FieldFill.INSERT)
表示第一次插入数据时,插入createTime数据,在后期对数据进行更新时,createTime属性的数据不进行改变,保留第一次插入的数据
@TableField(fill = FieldFill.INSERT_UPDATE)
表示第一次插入数据时,插入updateTime数据 ,但是在后期对数据进行更新时,只修改updateTime属性的数据

注意,此方式需要创建一个自动填充的处理器,并且需要将此方法注入到Spring IoC容器

@Component
public class MyMetaObjectHandler  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);
    }
}

MetaObjectHandler为mybatis plus提供
文件路径
在这里插入图片描述

4.@Version

标记乐观锁,通过version字段来保证数据的安全性,当修改数据的时候,会以version作为条件,当条件成立的时候才会修改成功

(1)往数据库添加version字段,默认值为1

(2)实体类添加version属性并添加啊@Version注解

@Data
public class Student {
    private long id;
    private String name;
    private long age;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Version
    private Integer version;

}

(3)注册MybatisPLus config配置类

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor optimisticLockerInnerInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

(4)测试

	@Autowired
    private StudentMapper studentMapper;
    @Test
    void update(){
        Student student=studentMapper.selectById(1);
        student.setName("张伟1");

        Student student2=studentMapper.selectById(1);
        student2.setName("张伟2");

        studentMapper.updateById(student2);
        studentMapper.updateById(student);
    }

在这里插入图片描述

5.实现枚举的两种方式

(1)使用@EnumValue注解

创建枚举类:

public enum StatusEnum {

    上班(1, "上班"),
    休息(0,"休息");

    StatusEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    @EnumValue
    private Integer code;

    private String msg;
}

实体类添加status属性

@Data
public class Student {
    private long id;
    private String name;
    private AgeEnum age;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Version
    private Integer version;

    private StatusEnum status;

}

数据库添加status字段,默认值为1
在这里插入图片描述
测试
在这里插入图片描述
通过注解的方式是将被@EnumValue注解的属性与数据库的字段进行映射

(2)通过接口实现

public enum AgeEnum implements IEnum<Integer> {
    one(1,"一岁"),
    two(2,"两岁"),
    three(3,"三岁");

    AgeEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    private Integer code;
    private String msg;

    @Override
    public Integer getValue() {
        return this.code;
    }
}

实体类修改age属性类型为AgeEnum

@Data
public class Student {
    private long id;
    private String name;
    private AgeEnum age;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Version
    private Integer version;

    private StatusEnum status;

}

结果
在这里插入图片描述

6. @TableLogic映射逻辑删除

数据库添加deleted字段,默认值为0,0为不删除,1为删除
实体类添加deleted属性

@Data
public class Student {
    private long id;
    private String name;
    private long age;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Version
    @TableField(fill = FieldFill.DEFAULT )
    private Integer version;
    @TableField(fill = FieldFill.DEFAULT )
    private StatusEnum status;
    @TableLogic
    private Integer deleted;

}

Application.yml配置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_47360805/article/details/126917779

mybatis_tortoise007的博客-爱代码爱编程

第一部分:Mybatis 1:Mybatis学习笔记(一)——hello world 入门 2:MyBatis学习笔记(二)——XML配置使用的基本方式 3:MyBatis学习笔记(三)——注解方式的基本使用

【重要】给Java初学者的建议——常用框架-爱代码爱编程

目录 为什么学框架? 建议学的框架有哪些?要怎么学? 学习资源 为什么学框架? 如果你是刚毕业的学生:加分项(有项目经验更好)如果刚工作1-2年:公司工作必需要用框架、学好框架准备以后的机会和面试如果是工作多年的老鸟:搭建基础框架、解决复杂的技术问题、解决新人遇到的问题、升职标准:代码规范化、代码安全性快:减少重复代码(复用性)、代码量少、可扩展

SpringBoot多数据源解决方案-爱代码爱编程

最近在做一个数据统计的项目,这里涉及到多个数据库的数据统计,所以找到了一个不错的解决方案。 写一篇博客作为笔记。 例子介绍 类库:例子中使用的是MyBatis Plus和Dynamic Datasource的组合 开源项目地址:MyBatis Plus & Dynamic Datasource Maven配置示例 <dependency>

Spring Boot 整合 Mybatis Plus(从零开始学习Mybatis Plus)-爱代码爱编程

Spring Boot 整合 Mybatis Plus(从零开始学习Mybatis Plus) 什么是Mybatis Plus Mybatis:Mybatis是一款面向对象的关系型数据库。 Mybatis Plus:Mybatis Plus在Mybatis的基础上,简化了开发步骤,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生

SSM框架学习笔记6—Mybatis Plus-爱代码爱编程

SSM框架学习笔记6—Mybatis Plus 1.MybatisPlus1.1 ORM思想1.2 面向对象操作方式说明1.3 面向对象操作的原理1.4 MybatisPlus介绍2. MP入门案例2.1 导入MP包2.2 POJO属性映射2.3 继承Mapper接口2.4 修改YML配置文件2.5 MP入门案例2.6 添加sql日志2.7 测试案

Spring boot --Mybatis Plus使用笔记 (一)-爱代码爱编程

Spring boot --Mybatis Plus使用笔记 (一) 前言一.Mybatis Plus 配置maven 导入jar包坐标文件配置,使用的是 application.properties引入分页插件类二.实体类注解配置QueryWrapperLambdaQueryWrapper总结 前言 开发环境是 spring boot 结合

MybatisPlus的乐观锁-爱代码爱编程

Mybatis Plus添加乐观锁 1.乐观锁和悲观锁概念和理解2.Mybatis Plus实现乐观锁 1.乐观锁和悲观锁概念和理解 相关的定义和概念在学习Redis的事务已经做过笔记,这里就不重复写了 2.Mybatis Plus实现乐观锁 此处是在Mybatis Plus的自动填充的代码上进行修改 给数据库添加一个version字

MyBatis Plus 教程-爱代码爱编程

MyBatis Plus 教程 MyBatis Plus 教程MyBatis Plus 简介MyBatis Plus 环境准备MyBatis Plus 项目初始化MyBatis Plus 安装MyBatis Plus 简单示例 BaseMapper 接口 CRUD BaseMapper 接口简介select 查询和 Wrapperselect 复杂

MyBatis Plus-爱代码爱编程

文章目录 第一节 MyBatis Plus 的简介第二节 MyBatis Plus 的框架搭建[1] 第一步:导包[2] 搭建SSM开发环境[3] 在数据库中创建测试表[4] 在pojo层下创建Student表的实体类[5] 在mapper层创建StudentMapper接口并继承BaseMapper接口[6] 创建测试类,并从Spring容器中获

MyBatis—Plus学习笔记-爱代码爱编程

MyBatis—Plus学习笔记 1.MyBatis—Plus介绍 MyBatis—Plus 简称 MP,是一个Mybatis的增强工具,在原来Mybatis的基础上只做增加不做改变,为简化开发,提高效率而生    愿景  我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。   特性: 无

【Spring Cloud Alibaba】Mybatis Plus 持久层-爱代码爱编程

文章目录 【Spring Cloud Alibaba】Mybatis Plus 持久层1、Mybatis Plus2、集成 Mybatis Plus微信公众号 【Spring Cloud Alibaba】Mybatis Plus 持久层 1、Mybatis Plus Mybatis Plus 是国产的持久层框架,这里使用起来就很简单了,应为

mybatis plus 学习笔记-爱代码爱编程

目录 零.引言 一.快速开始 二.Mapper 的 CRUD 1.insert 操作 2.update 操作 3.delete 操作 4.select 操作  三 ActiveRecord(AR) 1 ActiveRecord 简介 2 准备 3 insert 4 update 5 delete 6 select 四.常用注解

mybatisplus学习笔记_mybatis-爱代码爱编程

前言:这里使用的是SpringBoot整合MybtisPlus项目。 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <v