MyBatis-Plus

MyBatis-Plus简介

MyBatis-Plus简化开发,配置文件

特性

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

#支持数据库
mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver

达梦数据库 、 虚谷数据库 、 人大金仓数据库

#框架结构

达梦数据库与mysql数据库 语法差异_java

1.初体验

1.建立数据库,导入数据
2.导入对应的依赖
3.编写项目

  • 配置数据库链接
# DataSource Config
spring:
 datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver  #the name of driver
  # schema: classpath:db/schema-h2.sql #excute this sql which is not needed here when start the project
 # data: classpath:db/data-h2.sql     #excute this sql is not needed here when start the project
   url: jdbc:mysql://localhost:3306/th_jr_risk_ods?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
   #jdbc:mysql://localhost:3306/th_jr_risk_ods?  the address and the name of the database
   #useSSL=false
   #&useUnicode=true&characterEncoding=utf-8          support the chinese
   #&serverTimezone=GMT%2B8                            set the timezone for earth eight
   username: root
   password: test
  • 编写实体类
package com.learning02.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

   private long id;
   private String id_card;
   private String name;
   private String bank_card;
   private String linkman_phone;
   private long time_range;
   private Date create_time;
   private Date update_time;
}
  • 编写接口继承BaseMapper即可!至此所有的CRUD都已经完成
package com.learning02.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.learning02.pojo.User;
import org.springframework.stereotype.Repository;

//There is no need to develop the evil CRUD any more,just herit an interface after use the mybatis-plus
@Repository
public interface userMapper extends BaseMapper<User>{
}

add MapperScan

package com.learning02;

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

@SpringBootApplication
@MapperScan("com.learning02.dao")
public class SpringbootMp02Application {

   public static void main(String[] args) {
       SpringApplication.run(SpringbootMp02Application.class, args);
   }

}
  • 测试使用即可

常用的crud操作,BaseMapper都已经完成封装,尤其是单表操作

  • 增删改查
  • 乐观锁
  • 逻辑删除
  • 自动填充
  • 分析性能
  • 主键策略生成
  • 稍微复杂一点的只需要编写Wrapper条件构造器即可!

2.插入策略

插入

关于Id生成的一些策略(雪花算法)

逐渐策略问题,默认是雪花算法

1.自增策略
保证数据库是自增的
增加IDType未Auto

3.更新策略

扩展:自动填充

alibaba规范中:表格必须有id,gmt_create,gmt_modified三个字段
自动更新策略,两种级别

数据库级别(不建议)

代码级别

1.删除数据库更新默认值
2.代码编写

  • List item

4.乐观锁

乐观锁:非常乐观,无论什么操作都不加锁(分布式环境怎么处理冲突呢)
悲观锁:非常不乐观,无论什么操作都枷锁(没有问题)

我们通常的方式就是增加一个乐观字段即可(version)
当更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:

  • 去除记录时,获取当前version【查询】old version=1
  • 更新时,带上这个version【更新】
//thread num-01
  • 执行更新时,set version=newVersion where version=oldVersion
  • 如果version不对,就更新失败

MP对乐观锁进行了支持

1.添加version注解到字段上面
2.添加乐观锁插件
3.测试就自动带上了版本号

5.查询操作

6.删除delete

拓展:逻辑删除

逻辑删除:并不是真的从数据库删除,只是加了一个判断而已
物理删除:直接从数据库中删除数据
逻辑删除业务场景:
1.添加逻辑删除字段
2.添加注解
3.处理注解的插件
4.仅查询删除之后的数据,以后的查询都会匹配上逻辑删除字段

7.性能分析插件

在开发的时候发现慢sql
1.配置插件即可

8.条件构造器

平时编写sql,一般最多都是写一些条件;MP也提供了构造器提供使用