关于MybatisPlus那点事

关于MybatisPlus那点事

浮梦 466 2022-06-28

前言

Hello,我是叼毛,是一个无所事事的大二学生,我之前学过一个名叫Mybatis的一个东西,刚刚开始觉得,emmm,雀氏比JDBC好用,But(但是)作为一个当代高质量大学生,我怎么能自己手写Sql语句呢?后来通过另外一个叼毛,知道了MybatisPlus这个,我淦,直接Sql都省下了,那这偷懒省事的东西,啊不,高效率开发工具,能少得了我的加入?下面是我学习MybatisPlus的笔记,大家可以看看!

与MyabtisPlus的相关信息

首先国际惯例,先把我们可爱的MybatisPlus官网发出来!!!

MybatisPlus官网 瞧瞧人家说的就是有文化,Mybatis-Plus为简化开发而生

MybatisPlus源码地址 github嗷,记得自备梯子(小声BB)

MybatisPlus简介

一、简介

MybatisPlus就是一个Mybatis的增强工具,在Myabtis的基础上,只做了增强没有做出改变(好像说了,又好像没说),为简化开发、提高效率而生

二、特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的–条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
  • 内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击

MybatisPlus注解

其实MybatisPlus拿捏他还是得从他的注解开始,我们接下来看看吧!!!

@TableName

描述:表名注解

该注解用来将指定的数据库表和 JavaBean 进行映射

看下方的表格,其实吧。。。我想说的是,我只能用到这个value值,有待继续学习嗷

属性 类型 必须存在 默认值 描述
value String “” 定义这个实体类表名
schema String “” 我。。。再学学再写上去,我也不知到啥意思
keepGlobalPrefix boolean false 是否保持使用全局的 tablePrefix 的值(如果设置了全局 tablePrefix 且自行设置了 value 的值)(@since 3.1.1)
resultMap String “” xml 中 resultMap 的 id
autoResultMap boolean false 是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建并注入)(@since 3.1.2)

@TableId

描述:主键注解

该注解用于将某个成员变量指定为数据表主键。

这个就是设置下数据库表中哪个是主键,在实体类中加上这个注解和数据库保持一致

属性 类型 必须存在 默认值 描述
value String "’ 主键字段名
type Enum(枚举) IdType.NONE 主键类型

这边再精进点,就是上方的Enum类型设置时,枚举的一些讲解,以后定义值为 IdType.xxxxx

属性 备注
AUTO 数据库ID自增
NONE 无状态(如果@TableId未设置type值,默认的就是这个)
INPUT insert 前自行 set 主键值
ASSIGN_ID 分配ID(主键类型为 Number(Long和Integer) 或 String)(since 3.3.0),使用接口 IdentifierGenerator 的方法 nextId(默认实现类为 DefaultIdentifierGenerator 雪花算法)。
ASSIGN_UUID 分配 UUID,主键类型为 String (since 3.3.0),使用接口 IdentifierGenerator 的方法 nextUUID(默认 default 方法)。

@TableFieId

描述:字段注解(非主键)

该注解用于标识非主键的字段,将数据库列与 JavaBean 中的属性进行映射。

属性 类型 必须存在 默认值 描述
value String “” 字段名
el String “” 映射为原生 #{ ... } 逻辑,相当于写在 xml 里的 #{ ... } 部分
exist boolean true 是否为数据库表字段
condition String “” 字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s}参考
update String “” 字段 update set 部分注入, 例如:update=“%s+1”:表示更新时会set version=version+1(该属性优先级高于 el 属性)
strategy Enum FieldStrategy.DEFAULT 字段验证策略 3.1.2+使用下面3个替代
insertStrategy Enum DEFAULT 举例:NOT_NULL: insert into table_a(column) values (#{columnProperty}) (since v_3.1.2)
updateStrategy Enum DEFAULT 举例:IGNORED: update table_a set column=#{columnProperty} (since v_3.1.2)
whereStrategy Enum DEFAULT 举例:NOT_EMPTY: where column=#{columnProperty}
fill Enum FieldFill.DEFAULT 字段自动填充策略
select boolean true 是否进行 select 查询
keepGlobalFormat boolean false 是否保持使用全局的 format 进行处理(@since 3.1.1)

好!EveryBody,目前先更新到这,因为我就学了这么多。。。

MybatisPlus入门

一、使用IDEA创建一个SpringBoot项目

我先略过…后续我会补全的!!!我保证

二、给项目添加MyabtisPlus依赖

下面是单单的MybatisPlus的依赖代码,加在pom.xml文件里面就好了!!!温馨提醒一句话,加了MybatisPlus也得有Mybatis的插件和启动器必须要有哦。

<!-- MybatisPlus 插件 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>
<!-- Mybatis 插件 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.5</version>
</dependency>
<!--Mybatis启动器-->
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>2.2.2</version>
</dependency>

但是就我这个懒蛋,一个MybatisPlus插件能满足我?是不是还得来个Lombok插件,别忘了IDEA下载Lombok插件嗷

<!-- Lombok 插件 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

三、配置application文件以及启动类

众嗦肘子(众所周知),application.properties文件是项目的配置文件,但是我不用properties后缀的文件,我自己创一个application.yml文件,在这里写配置,别问,问就是闲的,其实都可以哈

application.properties配置如下

// 这个是加载mysql驱动的
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
// 下面这个我就不动了,这个是设置数据库地址的
spring.datasource.url= jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
// 我觉得只要脑子正常,应该知道这是啥,算了说一下吧
// 数据库账号
spring.datasource.username = 数据库账号
// 数据库密码
spring.datasource.password = 数据库密码

application.yml配置如下

spring:
  datasource:
  	// 这个是加载mysql驱动的
    driver-class-name: com.mysql.cj.jdbc.Driver
    // 下面这个我就不动了,这个是设置数据库地址的
    // 是不是有点熟悉,嘻嘻,是的,我是复制粘贴过来的
    url: jdbc:mysql://127.0.0.1:3306/test
    username: 数据库账号
    password: 数据库密码

好,配置完了application文件了吧,我们配置下启动类

package com.dream.mybatisplusdemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
// 说好听点是配置,其实就是给这个叼毛启动类加个@MapperScan注解
// 这里面的值是mapper或者dao接口存在的目录地址嗷,不懂就在下面的评论问
@MapperScan("com.dream.mybatisplusdemo.mapper")
public class MybatisplusdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisplusdemoApplication.class, args);
    }
}