基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用

news2024/12/21 21:52:29

在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


MyBatisPlus基础

  • 一、入门案例
    • 1.1 创建新模块,选择Spring初始化,并配置模块相关基础信息
    • 1.2 选择当前模块需要使用的技术集(仅保留JDBC)
    • 1.3 手动添加mp起步依赖
    • 1.4 设置Jdbc参数(application.yml)
    • 1.5 制作实体类与表结构(类名与表名对应,属性名与字段名对应)
    • 1.6 定义数据接口,继承BaseMapper<User>
    • 1.7 测试类中注入dao接口,测试功能
    • 1.8 运行结果
  • 二、MyBatisPlus概述
  • 三、标准数据层开发
    • 3.1 标准数据层CRUD功能
    • 3.2 新增
    • 3.3 删除
    • 3.4 修改
    • 3.5 根据id查询
    • 3.6 lombok工具
  • 四、 分页功能
    • 4.1 设置分页拦截器作为Spring管理的bean
    • 4.2 执行分页查询
    • 4.3 开启日志(观察底层SQL语句)

一、入门案例

  • MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率
  • 官网:https://mybatis.plus/
  • 开发方式:
    • 基于MyBatis使用MyBatisPlus
    • 基于Spring使用MyBatisPlus
    • 基于SpringBoot使用MyBatisPlus

1.1 创建新模块,选择Spring初始化,并配置模块相关基础信息

在这里插入图片描述


在这里插入图片描述


1.2 选择当前模块需要使用的技术集(仅保留JDBC)

在这里插入图片描述


在这里插入图片描述


1.3 手动添加mp起步依赖

<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.4.1</version>
</dependency>
  • 由于mp并未被收录到idea的系统内置配置,无法直接选择加入

1.4 设置Jdbc参数(application.yml)

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/mybatis?serTimezone=UTC
    username: root
    password: 123456
  • 如果使用Druid数据源,需要导入对应的坐标

1.5 制作实体类与表结构(类名与表名对应,属性名与字段名对应)

sql字段:
在这里插入图片描述
java属性:
在这里插入图片描述

1.6 定义数据接口,继承BaseMapper

@Mapper
public interface UserDao extends BaseMapper<User> {
}

1.7 测试类中注入dao接口,测试功能

@SpringBootTest
class MybatisplusApplicationTests {

	@Autowired
	private UserDao userDao;

	@Test
	void testGetAll() {
		List<User> users = userDao.selectList(null);
		System.out.println(users);
	}
}

1.8 运行结果


在这里插入图片描述


二、MyBatisPlus概述

MyBatisPlus特性:

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

三、标准数据层开发

3.1 标准数据层CRUD功能

功能自定义接口MP接口
新增boolean save(T t)int insert(T t)
删除boolean delete(int id)int deleteById(Serializable id)
修改boolean update(T t)int updateById(T t)
根据id查询T getById(int id)T selectById(Serializable id)
查询全部List<T> getAll()List<T> selectList()
分页查询PageInfo<T> getAll(int page,int size)IPage<T> selectPage(IPage<T> page)
按条件查询List<T> getAll(Condition condition)IPage<T> selectPage(Wrapper<T> queryWrapper)

3.2 新增

@Test
	void testSave() {
		User user = new User();
		user.setId(5);
		user.setUsername("小夏");
		user.setPassword("123");
		user.setGender("女");
		user.setAddr("北京");
		userDao.insert(user);
	}

3.3 删除

@Test
	void testDelete() {
		userDao.deleteById(5);
	}

3.4 修改

@Test
	void testUpdate() {
		User user = new User();
		user.setId(1);
		user.setUsername("张三");
		userDao.updateById(user);
	}

3.5 根据id查询

@Test
	void testGetById() {
		User user = userDao.selectById(2);
		System.out.println(user);
	}

3.6 lombok工具

  • Lombok是一个Java类库,提供了一组注解,简化POJO实体类开发
<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <scope>provided</scope>
</dependency>
  • 常用注解:@Data
@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String addr;
}
  • 为当前实体类在编译期设置对应的get/test方法,无参/无参构造方法,toString方法,hashCode方法,equals方法等

四、 分页功能

4.1 设置分页拦截器作为Spring管理的bean

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

4.2 执行分页查询

@Test
	void testGetByPage() {
		IPage page = new Page(1,4);
		userDao.selectPage(page,null);
		System.out.println("当前页码数:" + page.getCurrent());
		System.out.println("每页显示数:" + page.getSize());
		System.out.println("一共多少页:" + page.getPages());
		System.out.println("一共多少条数据:" + page.getTotal());
		System.out.println("数据:" + page.getRecords());
	}

4.3 开启日志(观察底层SQL语句)

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

在这里插入图片描述


在这里插入图片描述


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

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

相关文章

深入理解Python中的多进程和多线程

前言 此篇文章将深入的讲解Python中的多进程和多线程 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 第一部分&#xff1a;多进程 多进程是指在操作系统中…

STL stack,queue,deque以及适配器

目录 stackstack的使用stack模拟实现 queuequeue的使用queue模拟实现 适配器deque stack stack的使用 下面是stack库中的接口函数&#xff0c;有了前面的基础&#xff0c;我们可以根据函数名得知函数的作用 函数说明stack()构造空栈empty()判断栈是否为空size()返回栈中元素…

keil5 快捷下载STM32系列芯片器件包的方法

以STM32H7系列的器件包为例,官网的下载网址为 https://sadevicepacksprodus.blob.core.windows.net/pack/Keil.STM32H7xx_DFP.3.1.1.pack 其中STM32H7xx为芯片系列编号,3.1.1为器件包的版本 如需下载其他系列和版本的器件包,只需把网址中的编号和版本换成对应的即可(前提是输入…

Websocket、SessionCookie、前端基础知识

目录 1.Websocket Websocket与HTTP的介绍 不同使用场景 Websocket链接过程 2.Session&Cookie Cookie的工作原理 Session的工作原理 区别 3.前端基础知识 1.Websocket Websocket与HTTP的介绍 HTTP&#xff1a; 1.HTTP是单向的&#xff0c;客户端发送请求&#xff0…

OWS.infg应用程序隐私政策

本软件尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务&#xff0c;本软件目前不会使用和披露您的个人信息。但本软件会不时更新本隐私权政策。您在同意本软件服务使用协议之时&#xff0c;即视为您已经同意本隐私权政策全部内容。本隐私权政策…

OJ练习第154题——到家的最少跳跃次数

到家的最少跳跃次数 力扣链接&#xff1a;1654. 到家的最少跳跃次数 题目描述 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位置&#xff08;即往右跳&#xff09;。 它…

【数据结构】——查找、散列表的相关习题

目录 一、选择填空判断题题型一&#xff08;顺序、二分查找的概念&#xff09;题型二&#xff08;分块查找的概念&#xff09;题型三&#xff08;关键字比较次数&#xff09; 二、应用题题型一&#xff08;二分查找判定树&#xff09; 一、选择填空判断题 题型一&#xff08;顺…

1、英飞凌-AURIX-TC297简介

目录 TC297简介TC297特点&#xff1a;系统优势最具创新性的安全应用场景 printf("欢迎关注公众号&#xff1a;Kevin的学习站/车载嵌入式探索者&#xff0c;博主建立了一个车规级开发交流群&#xff0c; 感兴趣的朋友可以关注公众号&#xff0c;加个人WX&#xff1a;_kevin…

医疗小程序:让服务更高效,用户体验更优化

随着移动互联网的快速发展&#xff0c;小程序已经成为了一个热门的开发方向。医疗健康类小程序也不例外&#xff0c;拥有广泛的市场需求和前景。本文将为你提供一份完整的医疗健康类小程序开发攻略&#xff0c;帮助你快速开发上线一个专业成熟的小程序商城。 一、选择合适的小程…

C++(17):异常处理

异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理。 异常使得能够将问题的检测与解决过程分离开来&#xff1a;程序的一部分负责检测问题的出现&#xff0c;然后解决该问题的任务传递给程序的另一部分。检测环节无须知道问题处理模块的…

Android 音频框架 基于android 12

文章目录 前言音频服务audioserver音频数据链路hal 提供什么样的作用 前言 Android 的音频是一个相当复杂的部分。从应用到框架、hal、kernel、最后到硬件&#xff0c;每个部分的知识点都相当的多。而android 这部分代码在版本之间改动很大、其中充斥着各种workaround的处理&a…

AI能完全取代PS吗?两者僵持背后的设计思路!

PS 是功能强大的位图图片处理软件。它的核心功能是图片处理&#xff0c;最大特点是放大图片时会出现马赛克模糊。PS 存在下载安装复杂&#xff0c;功能繁杂&#xff0c;新手不易上手等缺点。越来越多设计师更青睐轻量级的协作设计软件&#xff0c;例如新一代国产软件即时设计。…

openCV实战-系列教程11:文档扫描OCR识别上(轮廓检测/轮廓近似/透视变换/OCR识别)项目实战、源码解读

&#x1f9e1;&#x1f49b;&#x1f49a;&#x1f499;&#x1f49c;OpenCV实战系列总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 下篇内容&#xff1a; openCV实战-系列教程13&#xff1a;文档扫描OCR识别下&am…

李跳跳下载-《告别广告困扰,让李跳跳助力打造清爽浏览体验》

大家好&#xff0c;&#x1f44b;今天我想向大家介绍一款非常好用的应用程序——李跳跳 App &#x1f680;。 随着智能手机的普及&#xff0c;应用程序已经成为了我们日常生活中必不可少的一部分。但是&#xff0c;随之而来的是各种各样的广告&#xff0c;这些广告不仅浪费我们…

【C++】输入输出及格式控制

在各类算法竞赛和机试中&#xff0c;对测试数据和输出格式往往会有明确的规定&#xff0c;笔者结合个人刷题经历&#xff0c;得到了以下C语言输入输出控制的方法。 cin&#xff1a;从缓冲区中读取数据 cin>>从缓冲区中读取数据时&#xff0c;若缓冲区中第一个字符是空格…

PXE网络批量装机

目录 一、什么是PXE&#xff1f; 二、PXE&#xff08;Preboot Execution Environment&#xff09;的主要组件 1、PXE服务器&#xff08;PXE Server&#xff09; 2、DHCP服务器&#xff08;Dynamic Host Configuration Protocol Server&#xff09; 3、TFTP服务器&#xff…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(四):有损传输线建模

传输线中信号衰减的两个损耗过程是通过信号和返回路径导体的串联电阻以及通过有损耗介电材料的分流电阻。这两个电阻器的电阻都与频率相关。 值得注意的是&#xff0c;理想电阻器的电阻随频率恒定。我们已经证明&#xff0c;在理想的有损传输线中&#xff0c;用于描述损耗的两个…

CAD 中Spline(样条曲线)的创建

我把自己研究的流程留下&#xff0c;读者需慢慢探索: Polyline pl new Polyline(); pl.AddVertexAt(0, new Point2d(2, 2), 0, 0, 0); pl.AddVertexAt(1, new Point2d(5, 5), 0, 0, 0); pl.AddVertexAt(2, new Point2d(10, 3), 0, 0, 0); pl.AddVertexAt(3, new Point2d(15, …

uniapp 布局(自定义导航栏加固定高度的主要内容)

不想让整体页面出现滚动条 页面大致分为三部分&#xff0c;导航栏、主题内容、tabbar&#xff0c;不想让整个页面出现滚动条&#xff0c;只想让主要内容滚动。 我这里是直接用了uni.getSystemInfoSync()&#xff0c;整体分为两部分&#xff0c;自定义头部和滚动内容&#xff…

UE5- c++ websocket客户端写法

# 实现目标 ue5 c 实现socket客户端&#xff0c;读取服务端数据&#xff0c;并进行解析 #实现步骤 {projectName}.Build.cs里增加 "WebSockets","JsonUtilities", "Json"配置信息&#xff0c;最终输出如下&#xff1a; using UnrealBuildTool;…