MybatisPlus

1、介绍

1.1、概述

是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率。

2.2、官网

https://www.baomidou.com/

2.3、特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

2、MP的基本使用

2.1、BaseMapper常用方法


   2.1. 2、增加
        insert
            动态SQL,字段为空,则不插入该字段
            自动主键回填
    2.1.3、删除
        deleteById
            根据ID删除
        deleteBatchIds
            根据ID列表删除
        delete
            根据条件删除
    2.1.4、更新
        updateById
            根据ID更新
        update
            根据条件更新
    2.1.5、查询
        selectById
            根据ID更新
        selectBatchIds
            根据ID列表查询
        selectOne
            根据条件查询一个
        selectCount
            根据条件计数
        selectList
            根据条件查询
        selectPage
            根据条件分页

2.2、显示日志【包括SQL】

# 开启mp的日志(输出到控制台)
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.3、分页

2.3.1 、配置分页拦截器
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1、创建MybatisPlusInterceptor拦截器对象
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        //2、添加分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}
2.3.2、测试方法
@Test
    public void page() {
        IPage<User> ipage = new Page(2L, 3L);
        this.usermapper.selectPage(ipage, (Wrapper)null);
        System.out.println(ipage);
    }

3、DQL

3.1、条件查询

核心接口:Wrapper
            QueryWrapper根据数据库字段名查询
            LambdaQueryWrapper  使用Lambda表达式查询
                不需要自己写列名,是通过方法引用来获取列名
            LambdaUpdateWrapper    使用Lambda表达式更新
        多条件关系  and   or

    @Test
    public void orTest() {
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper();
        String name = "占山";
        Integer age = 20;
        ((LambdaQueryWrapper)((LambdaQueryWrapper)((LambdaQueryWrapper)lambdaQueryWrapper.between(age != null, User::getAge, 10, 100)).like(name != null, User::getName, name)).or()).like(User::getPassword, "123");
        List<User> users = this.usermapper.selectList(lambdaQueryWrapper);
        PrintStream var10001 = System.out;
        Objects.requireNonNull(var10001);
        users.forEach(var10001::println);
    }

    @Test
    public void andTest() {
        LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper();
        userLambdaQueryWrapper.ge(User::getAge, 10);
        userLambdaQueryWrapper.lt(User::getAge, 100);
        ((LambdaQueryWrapper)userLambdaQueryWrapper.like(User::getName, "UP")).likeRight(User::getTel, "13");
        List<User> users = this.usermapper.selectList(userLambdaQueryWrapper);
        PrintStream var10001 = System.out;
        Objects.requireNonNull(var10001);
        users.forEach(var10001::println);
    }


        Lambda链式编程


    3.2、投影查询

指定查询字段
        分组
            groupBy
        排序
            orderBy
            orderByAsc
            orderByDesc


    3.3、查询条件

 范围匹配(> 、 = 、between)
模糊匹配(like)
空判定(null)
包含性匹配(in)
分组(group)
排序(order)
.......
https://mybatis.plus/guide/wrapper.html        

4、注解

4.1、@TableName

@TableName("tb_user")
public class User {
  

映射表名
当表名与实体类名不相同时,需要手动指定表名
 配置文件可以指定全局配置
            

# 开启mp的日志(输出到控制台)
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      #雪花算法生成id
      id-type: assign_id
      #映射表前缀,这样所有表名就不需要设定前缀
      table-prefix: tb_


   4. 2、@TableId

 映射主键
属性type
 指定主键生成策略。IdType这个枚举控制
AUTO:数据库自增
 ASSIGN_ID:雪花算法
通过5位机器ID,5位工作ID,在1ms之内可以生成连续的长整型数字 4095 个
局部配置优先于 全局配置
配置文件可以指定全局配置


 4.3、@TableField

映射普通字段
属性fill
要配置 MetaObjectHandler 处理

public class User {
    //主键自增
//    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    @TableField(select = false)
    private String password;
    @TableField(value = "telephone")
    private String tel;
    @TableField(exist = false)
    private List<Role> roles;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill =FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}

相关推荐

  1. MybatisPlus

    2023-12-06 10:08:01       71 阅读
  2. MybatisPlus

    2023-12-06 10:08:01       45 阅读
  3. MyBatisPlus

    2023-12-06 10:08:01       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 10:08:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 10:08:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 10:08:01       82 阅读
  4. Python语言-面向对象

    2023-12-06 10:08:01       91 阅读

热门阅读

  1. RedHat8.1安装mysql5.6(GLIBC方式)

    2023-12-06 10:08:01       67 阅读
  2. 网络协议的进化之路

    2023-12-06 10:08:01       52 阅读
  3. 深入理解 Spring Boot 的 ApplicationRunner 接口

    2023-12-06 10:08:01       52 阅读
  4. 软件测试面试真题 | 什么是PO设计模式?

    2023-12-06 10:08:01       56 阅读
  5. 汇编:常用的输入与输出

    2023-12-06 10:08:01       60 阅读
  6. MySQL的事务

    2023-12-06 10:08:01       60 阅读
  7. C#结构体应用实例

    2023-12-06 10:08:01       57 阅读
  8. day7 四数之和为x

    2023-12-06 10:08:01       45 阅读
  9. Frida抓包flutter app过程记录

    2023-12-06 10:08:01       58 阅读
  10. uniapp的subnvue苹果适配(ios)谷歌地图问题

    2023-12-06 10:08:01       47 阅读