MyBatis-Plus是什么?为什么用?怎么用?

2023-11-07

1.MyBatis-Plus是什么?

官方是这样定义的:

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

所谓的增强,就是已经封装好了一些crud(增删改查),不用再写mapper.xml,可以直接调用它的方法即可,如以下方法:


2.为什么要用MyBatis-Plus?

优点:

  • 效率提高了,因为基本的CRUD写好了
  • 支持Lambda形式调用,不用担心字段写错而引起的异常
  • 支持主键自动生成
  • 内置分页插件
  • 基于mybatis做增强而已
  • SQL语句自由控制,较为灵活
  • 提供动态SQL语句,可以根据需求灵活控制SQL与业务代码分离,易于阅读
  • 提供功能丰富的条件构造器快速进行无sql开发
  • 内置代码生成器,分页插件, 性能分析插件等


3.怎么用MyBatis-Plus?

需要注意的地方1:

(1)实体类中,如果使用了基本数据类型,就会导致在修改的时候,把原本不需要改动的数据也改动了,

因为原先的基本数据类型默认有值,所以他会默认set进去

(2)如果传入对象属性为nul,这些属性不参与sql拼接,也就不会set进去,因为他默认有判空机制

(3)如果是8个基本数据类型,有默认值,mybatis-plus认为是有值的,会拼接,也就会set进去


在讲下面的增删改查时,我们还需要了解下条件Wrapper特殊符号的意思,在下面的CRUD环节中会部分举例说明,

  • ne-------------不等(not equal)
  • eq---------等于
  • gt----------大于
  • lt----------小于
  • ge-------大于等于
  • le---------小于等于
  • between----xxx之间(wrapper.between("age",18,20)查询年龄在18-20)
  • notbetween---不在xxx之间
  • isNull---------是空
  • isNotNull-----不是空
  • in-------wrapper.in("id",1L,2L)查id为1和2的,这里因为是布尔类型
  • insql--------wrapper.insql("id","1,2")//sql片段
  • 错误写法wrapper.insql("id","1L,2L"),错误原因是加了L就是java语法了,而不是sql语法


主食来了---->CRUD(增删改查)

开始操作之前需要准备一下操作,主要:建库建表->引以下依赖->配置application.properties连接数据

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

(1)添加

MP添加没有过多的操作,方法就是insert();(例子如下)

@Test
public void testSave(){
        Employee employee = new Employee();
        employee.setAdmin(true);
        employee.setAge(18);
        employee.setDeptId(1L);
        employee.setEmail("EDC@123");
        employee.setName("edc");
        employee.setPassword("111");
        employeeMapper.insert(employee);
    }

(2)删除

MP删除的方法有这四个,分别是deleteById;delete;deleteBatchIds;deleteByMap,其中标黄的,在下方代码段中有举例,另外一个可以见名猜意,然后去实践一下;(例子如下)

    @Test
    public void testDelete(){
        //最普通的根据id来删
        employeeMapper.deleteById(1L);
        System.out.println("------------------------------------------------------");
        //根据指定的条件来删
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();//创建条件构造器
        wrapper.eq(Employee::getAdmin,true);//设置条件,条件是admin为true
        wrapper.lt(5>4,Employee::getAge,10);//年龄小于10的
        //此时的wrapper的条件是admin为true的并且年龄小于10
        employeeMapper.delete(wrapper);
        System.out.println("------------------------------------------------------");
        //传集合进来来删
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        employeeMapper.deleteBatchIds(list);//删除该数组的元素
    }
  • 在上述代码中,条件删除的时候,有引用到"lt()",其中5>4为ture,只有满足这个条件才会加上,这个条件"年龄小于10岁",此时的wrapper条件是admin为true并且年龄小于10
  • 如果前者条件为false,则不会加上"年龄小于10岁"这个条件,此时的wrapper条件就是admin为true的

(3)修改

MP修改有这两种,分别是updateById,update

    @Test
    public void testUpdate(){
        //根据id修改
        Employee employee = new Employee();
        employee.setId(3L);
        employee.setAdmin(true);
        employee.setAge(18);
        employee.setDeptId(1L);
        employee.setEmail("alun@123.cn");
        employee.setName("edc");
        employee.setPassword("111");
        employeeMapper.updateById(employee);

        System.out.println("-------------------------------------------");

        //条件修改
        Employee employee1 = new Employee();
        employee1.setEmail("alun@123.cn");
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();//创建条件构造器
        wrapper.ne(Employee::getAdmin,true);//设置条件,条件不等于true,那就是false囖
        wrapper.ge(5>4,Employee::getAge,10);//年龄大于或等于10
        employeeMapper.update(employee1 ,wrapper);
    }
  • 在上述代码中,条件删除的时候,有引用到"ge()",其中5>4为ture,只有满足这个条件才会加上,这个条件"年龄大于或等于10岁",此时的wrapper条件是admin为false并且年龄大于或等于10岁
  • 如果前者条件为false,则不会加上"年龄小于10岁"这个条件,此时的wrapper条件就是admin为false的

(4)查询

MP查询有10种,分别是selectByMap,selectMaps,selectMapsPage,selectObjs,selecyPage,

selectById,selectList,selectBatchIds,selectCount,selectOne

    @Test
    public void testGet(){
        //根据id来查
        Employee employee = employeeMapper.selectById(1L);
        System.out.println("------------------------------------------------------");
        //查所有
        List<Employee> list1 = employeeMapper.selectList(null);
        System.out.println("------------------------------------------------------");
        //根据集合查
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        List<Employee> employees = employeeMapper.selectBatchIds(list);
        System.out.println("------------------------------------------------------");
        //条件查询,返回满足条件的个数
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();//创建条件构造器
        wrapper.ne(Employee::getAdmin,true);//设置条件,条件是false的
        wrapper.ge(Employee::getAge,10);//年龄大于或等于10
        Integer integer = employeeMapper.selectCount(wrapper);
        System.out.println("------------------------------------------------------");
        //根据条件来查询
        LambdaQueryWrapper<Employee> wrapper1 = new LambdaQueryWrapper<>();//创建条件构造器
        wrapper1.eq(Employee::getAdmin,true)
                .lt(5>4,Employee::getAge,10);//设置条件,条件是admin为true并且年龄小于10的
        Employee employee1 = employeeMapper.selectOne(wrapper1);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis-Plus是什么?为什么用?怎么用? 的相关文章

随机推荐

  • TextView textSize 文字大小

    TextView 很常见的控件 关于文字大小的方法有 android widget TextView getTextSize 返回值的单位是PX return the size in pixels of the default text s
  • busybox简介

    busybox BusyBox 是标准 Linux 工具的一个单个可执行实现 BusyBox 包含了一些简单的工具 例如 cat 和 echo 还包含了一些更大 更复杂的工具 例如 grep find mount 以及 telnet 有些人
  • 150. 逆波兰表达式求值 python

    给你一个字符串数组 tokens 表示一个根据 逆波兰表示法 表示的算术表达式 请你计算该表达式 返回一个表示表达式值的整数 注意 有效的算符为 和 每个操作数 运算对象 都可以是一个整数或者另一个表达式 两个整数之间的除法总是 向零截断
  • 美容行业的翻身仗:ChatGPT带你玩转营销活动

    今天给大家带来一个 用ChatGPT给美容院 美容店 美容行业的商家 出一个营销策划活动方案的实例 在这个竞争激烈的美容行业 想要脱颖而出 你得有点与众不同的手段 别再拿那些陈词滥调的营销策略来忽悠我了 今天我要给你揭示一个行业的秘密武器
  • 【STATA】代码自用

    数据处理 描述性统计 输出 asdoc sum stat N mean sd tstat p1 p99 fs 7 dec 2 结果展示去除变量 reghdfe absorb vr 一对多合并 merge 1 m Symbol Year us
  • docker镜像制作(python2.7,redis)

    四 自制docker镜像 初始化 在任意文件夹下 mkdir mydocker cd mydocker 1 初始化Dockerfile文件 以python 2 7为模板制作镜像 注意要提前下载好该镜像 FROM python 2 7 sli
  • 从汇编分析函数调用堆栈详细过程

    前言 首先来说 我们今天的学习并不是为了学习汇编语言 而是为了更好地分析一些问题的底层原理 进入正题 首先由下面简单的代码我们来考虑两个问题 1 main函数调用sum sum执行完以后 怎么知道回到哪个函数中 2 sum函数执行完 回到m
  • STM32的SYSTICK详解

    什么是SysTick 这是一个24位的系统节拍定时器system tick timer SysTick 具有自动重载和溢出中断功能 所有基于Cortex M3处理器的微控制器都可以由这个定时器获得一定的时间间隔 SysTick作用 在单任务
  • Unity 利用AES给文件加密与解密

    using System using System Collections using System Collections Generic using System IO using System Security Cryptograph
  • OpenStack H版发布

    根据官方发布的消息 OpenStack 2013 2 代号Havana 最终版已经发布 除了增加OpenStack Metering Ceilometer 和OpenStack Orchestration Heat 两个新组件外 还完成了4
  • python3-关于GitHub的最基本操作

    阅读目录 介绍 什么是GitHub 创建存储库 创建一个分支 做一个提交 打开拉取请求 合并拉取请求 一 介绍 Hello World项目是计算机编程历史悠久的传统 这是一个简单的练习 可以让你在学习新东西时开始学习 让我们开始使用GitH
  • DB2检查死锁和解锁的命令(AIX系统)

    在交易量比较大的系统上经常由于程序原因或者数据库配置参数不当导致死锁发生 在交易高峰期 检查易发生死锁的表就很有必要 常用命令如下 1 检查监视器开关是否打开 db2 get monitor switches 如果锁定信息中
  • ajax上传form表单(type='file')FormData

    一般上传表单的时候有两种方式 1 form表单内实现 指定action和 method form标签内添加一个submit的button 点击submit实现上传功能 对任何的形式的input都可以 2 Ajax实现上传 一般情况下我们都会
  • 剑指offer 学习笔记 二叉搜索树的后序遍历序列

    面试题33 二叉搜索树的后序遍历序列 输入一个整数数组 判断该数组是不是某二叉搜索树的后序遍历结果 只要存在一个二叉搜索树的后序遍历结果为它即可 如果是返回true 不是返回false 假设输入数组的任意两个数字都不相同 后序遍历得到的序列
  • 《Python进阶系列》十: 整理文件和目录最最最常用的os模块

    盘一盘Python中的os模块 os模块是Python标准库中整理文件和目录最为常用的模块 该模块提供了非常丰富的方法用来处理文件和目录 图来自 https www cnblogs com ltkekeli1229 p 15709442 h
  • RSS订阅无需代码连接Outlook的方法

    RSS订阅用户使用场景 一家专门做书籍测评的企业 其日常工作中需要收集豆瓣上最受欢迎的书籍进行测评 为了确保测评的准确性和客观性 团队成员需要定期在Outlook上创建会议讨论新书 从不同角度对书籍进行深入剖析 然而 在实际执行过程中 他们
  • 聊聊 220V交流 过零检测

    聊聊过零检测 以及如何实现过零检测 by 矜辰所致 增加测试结果 2023 6 20 目录 前言 一 什么是过零检测 1 1 为何需要过零检测 二 如何做过零检测 2 1 光耦 2 2 比较器 运放 2 3 三极管 MOS管 2 4 过零检
  • 两个序列中位数算法c语言,PAT 2-13 两个有序序列的中位数(C语言实现)

    题目描述 已知有两个等长的非降序序列S1 S2 设计函数求S1与S2并集的中位数 有序序列A0 A1 AN 1的中位数指A N 1 2的值 即第 N 1 2 个数 A0为第1个数 输入格式说明 输入分3行 第1行给出序列的公共长度N 0 输
  • [DirectX][DirectInput][JoyStick]DirectInput的JoyStick创建步骤整理

    简介 DirectInput和其他DirectX组成部分一样 是通过硬件抽象层 HAL 和硬件仿真层 HEL 来实现 处理的输入设备一般包括鼠标 键盘 游戏控制杆 操作杆等 而且现在的DirectInput还能够支持力反馈设备 Step 1
  • MyBatis-Plus是什么?为什么用?怎么用?

    1 MyBatis Plus是什么 官方是这样定义的 Mybatis Plus 简称MP 是一个 Mybatis 的增强工具 在 Mybatis 的基础上只做增强不做改变 为简化开发 提高效率而生 所谓的增强 就是已经封装好了一些crud