MyBatisPlus入门到精通-1

news2024/10/6 14:17:34

MyBatisPlus(简称MP)
这篇博客主要讲解用MyBatisPlus进行三层架构中Dao层的开发
以这个为目的来进行我们的学习
我们会先通过一个概述和入门案例进行快速上手
之后我们再通过对我们原先的案列的问题进行分析
来进一步了解MP操作数据库的知识

快速入门

MP简介

MP是国人开发的插件,so他那个官网不是有点像拼音,他就是拼音
baomidou
他是在mybatis基础上做增强
不影响你原来mybatis使用,一下特殊需求肯定还是要我们用mybatis做自己实现的
在这里插入图片描述
在这里插入图片描述

案例

基于SpringBoot进行开发
在这里插入图片描述
就大致两件事
创建工程以及对应实体类
导入配置文件后,将对应的实体类和我们的配置进来的jar包新技术结合一下(其实是先导入依赖,然后直接写集合后的类)
1.创建工程
这里我们只练习MP,so不导入Web
在这里插入图片描述

这个创建的依赖项是没有MP选项的,我们需要后期手动加
这里就Mysql和Lombok即可
在这里插入图片描述
2.写入对应的依赖
德鲁伊连接池的和mybatisplus的起步依赖
注意:利用maven的多重继承,MP依赖下面有一个mybatis的依赖(我们就不需要导入了),所以是是依赖着mybatis开发的,仔细看还能看见JDBC(本来JDBC就是最底层)
在这里插入图片描述

  <!--myBatisPlus依赖        -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!--德鲁伊连接池依赖导入        -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>

3.写SpringBoot的配置文件和类
配置文件改成yml文件
在这里插入图片描述

代码格式是固定的,自己搜搜,然后改成自己得的信息

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver   # mysql 驱动
      url: jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&serverTimezone=UTC  # 连接数据库
      username: root    # 数据库账户
      password: 123456    # 数据库密码

实体类
在这里插入图片描述
对应的表
在这里插入图片描述
important point
看我们这里的接口定义
我们直接继承BaseMapper然后泛型写上我们的实体类
然后就不用做了,他会自动帮我们配置对应的有一些比较简答的方法
之前mybatis是需要你写方法和语句的,而这个有一些已经配置好的
在这里插入图片描述
4.测试
可以发现计算我们没有写,他也是有一些方法的
在这里插入图片描述
芜湖,成功输出我们的数据
在这里插入图片描述
就这样其实挺简单的一个入门程序

MP提供的功能

一些标准功能

CRUD

这是对于的实验mybatis和MP的方法对应
MP实现了我们对于表的基本CRUD功能
这些功能就不用自己定义了
在这里插入图片描述
那我们来测测呗
1.insert
返回的应该是变动的数据条数
数据库成功变化
忘了设置gender了,等会改一下
在这里插入图片描述
在这里插入图片描述
值得注意的就是我没有设置ID1的话,他会操作,但是不是因为没有ID,而是因为太大了超出了Integer的范围,我们给换成Long,再把Mysql表里的换成bigint即可添加成功
在这里插入图片描述
但你会发现这个ID还不是自增长的,它本身内部有一个算法,等会我们讲解一下
在这里插入图片描述
测试删除
代码

@Test
    void delete(){
        int i = userDao.deleteById(Long.valueOf("1684490505905733633"));
        System.out.println(i);
    }

测试结果
同样返回的是修改的条数
在这里插入图片描述
3.测试修改

    @Test
    void update(){
        User user = new User();
        user.setId(7L);//数据后加L代表Long类型!!!
        user.setGender((short)1);
        userDao.updateById(user);
    }

修改成功
在这里插入图片描述
但是想想我们之前做修改是很麻烦的
还要判断什么是不是null,是null的话不进行替换,不是的话进行替换
他都给设置好了,没值就不会修改对应项
对应的select上面也也有
selectById我有也就不演示了

那这些功能怎么来的呢?
答案显而易见,继承来的
继承我们BaseMapper的类实现的功能
在这里插入图片描述

分页查询功能(带Mp分页拦截器)

MP里是有这个功能的,对应的方法的效果如图

@Test
    void PageSelect(){
        IPage<User> page = new Page<>(1,2);
        IPage<User> page1 = userDao.selectPage(page, null);
        System.out.println("当前页码"+page1.getCurrent());
        System.out.println("每页显示数"+page1.getSize());
        System.out.println("一共多少页"+page1.getPages());
        System.out.println("一共多少条"+page1.getTotal());
        System.out.println("真正的数据"+page1.getRecords());

    }

但是运行出来的结果,还是查询全部的数据,而且对应页数和条数为0
想想select分页查询,其实也就是在select * from user 后加上
limit 第几条数据开始,一个查询的数据条数
我们MP底层是用拦截器来做的,拦截并增强(AOP)
so需要配置拦截器开启MP提供的分页拦截器
在这里插入图片描述
mpInterceptor拦截器
我们定义一个拦截器
bean注释,可以用@import不过我这里直接配置类了

public class MpConfig {
  @Bean
  @Configuration
  public MybatisPlusInterceptor mpInterceptor(){
      //1.定义Mp拦截器
      MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
      //2.添加具体的拦截器
      mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
      return mpInterceptor;
  }
}

在这里插入图片描述
现在就能正常查询了

在这里插入图片描述
分页底层
我们就看一看他的sql语句呗
从日志看,需要吧Mp运行日志配上
在这里插入图片描述
然后输出的日志
也是哪个预编译参数的由于我们写的页数是1条数是3,1对应就是从头开始呗
所以那个从头开始不用写就直接写查询多少条数据即可
在这里插入图片描述
如果是2,3,查询第二页,每页三行
他就会自己做一个计算
每页三行从第二页开始,起始条数就是(page-1)*页数
查询数据数还是没有多少条数据
so传参就是3,3
他底层都弄好了!

在这里插入图片描述

分页小结

在这里插入图片描述

在这里插入图片描述
需要的话可以开启Mp的日志
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HEVC并行处理技术介绍

h265 相比 h264 的复杂度 复杂度体现 ○ h265 帧内预测模式增多&#xff0c;h265 包含角度预测、DC 预测、平面模式等 35 种预测模式&#xff0c;远超 h264 的 17 种模式&#xff0c;帧内模式选择的复杂度大大增加&#xff1b; ○ h265 的区域划分方式更加多样化&#xff0c;提…

聊聊STM32串口通讯的话题

STM32 微控制器系列提供了多个串口模块&#xff0c;用于实现串口通讯。其中&#xff0c;STM32HAL 库中的 UART 驱动模块提供了一套方便易用的函数接口&#xff0c;可以用来配置和操作串口。 串口通讯是一种常见的数据传输方式&#xff0c;可以实现微控制器与外部设备或其他微控…

Jetbrains 2023.2教程

IDEA 2023.2 激活演示 Pycharm 2023.2 激活演示 WebStorm 2023.2 激活演示 Clion 2023.2 激活演示 DataGrip 2023.2 PhpStorm 2023.1.4 激活演示&#xff08;2023.2尚未发布&#xff09; RubyMine 2023.2 激活演示 获取方式 仔细看每一个工具演示的图片 本文由 mdnice …

深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

在 Elasticsearch 中&#xff0c;function_score 可以让我们在查询的同时对搜索结果进行自定义评分。 function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。 近期有同学反馈&#xff0c;function_score 的相关参数不好理解&#xff0c;本文将深入探讨 f…

2023软件设计师中级备考经验分享(文中有资料链接分享)

先摊结论吧&#xff0c;软考中级设计师备考只是备考半个月&#xff08;期间还摆烂了几天&#xff09;&#xff0c;然而成绩如下&#xff1a; 我自己都没想到会这么好的成绩。。。 上午题&#xff1a;推荐把软考通APP里的历年真题刷3-4遍&#xff0c;直接刷真题&#xff0c;然后…

TimescaleDB多节点功能概述

如果您有更大的pb级工作负载&#xff0c;则可能需要多个TimescaleDB实例。TimescaleDB多节点允许您运行和管理数据库集群&#xff0c;这可以为您提供更快的数据摄取&#xff0c;以及对大型工作负载响应更快、更高效的查询。 多节点架构 多节点TimescaleDB允许您将多个数据库连…

【学习笔记】视频检测方法调研

目录 1 引言2 方法2.1 视频目标跟踪2.1.1 生成式模型方法2.1.2 判别式模型方法2.1.2.1 基于相关滤波跟踪2.1.2.2 基于深度学习跟踪 2.2 视频异常检测2.2.1 基于重构方法2.2.2 基于预测方法2.2.3 基于分类方法2.2.4 基于回归方法 2.3 深度伪造人脸视频检测2.3.1 基于RNN时空融合…

UG NX二次开发(C++)-利用UFun函数获取曲面上等参数的点

文章目录 1、前言2、叶片的三维模型3、利用UFun函数获取曲面的三种方法3.1 利用UF_Modl来实现3.2 利用UF_Point来实现3.2 利用UF_So来实现4、结果展示1、前言 在多轴加工过程中(尤其是薄壁零件),由于需要根据工件表面的几何信息以获取切触点,然后生成刀位轨迹,本文以叶片…

UEditor 百度富文本编辑器使用 遇到问题

小小吐槽 碰到前后不分离项目&#xff0c;富文本使用的UEdtior UEditor 点击上传图片转base64 在ueditor.all.js文件中找到这个 callback()函数 这里使用根据图片的url转成base64 UEditore 粘贴图片转base64 UEditor回显图片&#xff08;base64&#xff09; 把ueditor.all…

【Docker】制作Docker私有仓库

文章目录 1. 安装私有镜像仓库2. 镜像仓库可视化3. 参考资料 1. 安装私有镜像仓库 由于之后我们需要推送到私有镜像仓库&#xff0c;我们预先安装好&#xff0c;使用的是Docker公司开发的私有镜像仓库Registry。 下载Registry的Docker镜像&#xff1b; docker pull registry:2使…

【Django+Vue】英文成绩管理平台--20230727

项目需求 能够满足大部分核心需求&#xff08;标绿&#xff09;&#xff1a;报表部分应该比较难。 项目地址 前端编译 https://gitlab.com/m7840/toeic_vue_dist Vue源码 https://gitlab.com/m7840/toeic_vue Django源码 https://gitlab.com/m7840/toeic_python 项目…

docker部署nextcloud+onlyoffice详细教程【外置MySQL】

一、部署环境 系统版本&#xff1a;CentOS Linux release 7.9.2009 (Core) 配置&#xff1a;16C 16G MySQL&#xff1a;5.7.20 二、部署过程 1、安装docker和docker-compose 请百度 2、创建数据库和用户&#xff0c;并授权 因为我使用外置MySQL&#xff0c;所以需要先创…

从零开始学Docker(一):Docker的安装部署

前述&#xff1a;本次学习与整理来至B站【Python开发_老6哥】老师分享的课程&#xff0c;有兴趣的小伙伴可以去加油啦&#xff0c;附链接 Linux 环境&#xff1a;RockyLinux 9 版本管理 Docker引擎主要有两个版本&#xff1a;企业版&#xff08;EE&#xff09;和社区版&#…

C语言爱心代码

代码&#xff1a; #include <stdio.h> int main() { int i, j, k, l, m; char c3; //ASCII码里面 3 就是一个字符小爱心 for (i1; i<5; i) printf("\n"); //开头空出5行 for (i1; i<3; i) { //前3行中间有空隙分开来写 for (j1; j<32-2*i; j) p…

计算机图形学十三加速结构

加速光线追踪 摘要 在上一节中&#xff0c;我们介绍了whited-style 光线追踪的原理&#xff0c;以及实现细节。相比与光栅化中所使用的blinn-phong模型&#xff0c;光线追踪显著提升了图像质量&#xff0c;但是随之而来的问题是渲染速度过慢。因为在判断光线与场景交点的时候…

面试典中典之线程池的七大参数

文章目录 一、七大元素解释1.corePoolSize&#xff08;核心线程数&#xff09;&#xff1a;2.maximumPoolSize&#xff08;最大线程数&#xff09;&#xff1a;3.keepAliveTime&#xff08;线程空闲时间&#xff09;&#xff1a;4.unit&#xff08;时间单位&#xff09;&#x…

MATLAB与ROS联合仿真(慕羽☆)全套开源资料索引

自2021年9月份开始进行MATLAB与ROS联合仿真相关的研究&#xff0c;至2021年12月份研究基本上结束&#xff0c;至今&#xff0c;已经近两年时间&#xff0c;期间曾收到过很多小伙伴的私信&#xff0c;想让我出点教程&#xff0c;期间我也曾多次想要抽点时间出教程&#xff0c;但…

地矿人专属的二次开发工具——地矿Web二次开发平台

工欲善其事必先利其器&#xff0c;随着互联网信息化时代的不断发展&#xff0c;信息系统和管理规范也越来越复杂&#xff0c;现有的软件产品功能会需要重新完善升级或更改&#xff0c;所以使用一套灵活应变可二次开发的软件产品是必不可少的&#xff0c;一款好的二次开发平台可…

【Apollo学习笔记】—— Routing模块

Routing模块功能 Apollo的routing模块读取高精地图原始信息&#xff0c;用于根据输入RoutingRequest信息在base_map中选取匹配最近的点作为导航轨迹的起点和终点&#xff0c;读取依据base_map生成的routing_map作为生成topo_graph的&#xff0c;然后通过Astar算法在拓扑图中搜…

Java中I/O流是什么?输入/输出流又是什么?

在 Java中所有数据都是使用流读写的。流是一组有序的数据序列&#xff0c;将数据从一个地方带到另一个地方。根据数据流向的不同&#xff0c;可以分为输入&#xff08;Input&#xff09;流和输出&#xff08;Output&#xff09;流两种。 在学习输入和输出流之前&#xff0c;我们…