MybatisPlus

本文介绍了MyBatisPlus,一个基于MyBatis的开发工具,强调其无侵入性、自动CRUD操作、Lambda支持、主键自动生成、ActiveRecord模式和注解等功能,帮助开发者提升开发效率和性能。
摘要由CSDN通过智能技术生成

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;
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值