SpringBoot---------整合Mybatisplus

devtools/2024/9/20 4:03:15/ 标签: spring boot, java, spring, mybatisplus, 后端

快速入门

第一步:导入依赖

        <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency>

第二步:编写mapper层,最最最重要的点: extends BaseMapper<Pojo>,就可以不用再编写Mapper层的方法以及SQL查询语句

package com.example.springboot_learn.mapper;import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.example.springboot_learn.Pojo.User;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface usermapper extends BaseMapper<User> {}

 第三步:使用mybatisplus

java">#mybatis的日志
mybatis-plus://日志显示configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl//关掉图标global-config:banner: false

① 普通查询:

java"> @Testvoid testum(){//新增数据User user=new User(6,"zzl",55,"test6baomidou.com");um.insert(user);//查询全部List<User> userslist = um.selectList(null);System.out.println(userslist);//参数ID查询User user1 = um.selectById(2);System.out.println("user1 = " + user1);//修改数据,这里有个注意点:只会修改你赋的值,未初始化的值不做修改User user2=new User();user2.setId(5);user2.setName("zzlyyds");um.updateById(user2);//删除数据um.deleteById(6);}

 

② 分页查询:

java">    @Testvoid tset02(){//分页查询,要使用拦截器实现该功能//1:显示第1页      2:一页多少条数据IPage page = new Page(1,2);um.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());}

 分页查询的拦截器配置:

java">package com.example.springboot_learn;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 mpConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {//定义MybatisplusMybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//添加具体的分页查询的拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

 

 ③条件查询以及多条件查询(LambdaQueryWrapper<User>):

java">@Testvoid tset03(){//方式一//按条件查询,由QueryWrapper对象来实现QueryWrapper wrapper = new QueryWrapper();wrapper.lt("age",20);List<User> userslist = um.selectList(wrapper);System.out.println(userslist);//方式二QueryWrapper<User> wrapper1 = new QueryWrapper<User>();wrapper1.lambda().gt(User::getAge,20);List<User> userslist1 = um.selectList(wrapper1);System.out.println(userslist1);//方式三,主用!!!!LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<User>();lambdaQueryWrapper.gt(User::getAge,25);List<User> userslist2 = um.selectList(lambdaQueryWrapper);System.out.println(userslist2);//链式编程写多条件查询LambdaQueryWrapper<User> lambdaQueryWrapper1 = new LambdaQueryWrapper<User>();//and操作lambdaQueryWrapper1.lt(User::getAge,25).gt(User::getAge,20);//or操作lambdaQueryWrapper1.lt(User::getAge,25).or().gt(User::getAge,20);userslist2 = um.selectList(lambdaQueryWrapper1);System.out.println(userslist2);}

 

④查询投影,分组,排序,范围查询

        //字段筛选wrapper.select("age");//分组wrapper.groupBy("age");//排序wrapper.orderByAsc("age");wrapper.orderByDesc("age");//等值wrapper.eq("age",18);//范围查询gt ge  lt le  eq  betweenwrapper.gt("age",18);//模糊匹配wrapper.likeRight("name","h");wrapper.likeLeft("name","j"); 

 

 ⑤数据库表名与编程变量名映射,控制字段不投影,添加自定义变量

表名: @TableName("user")

字段匹配以及不做字段投影:@TableField(value = 'pwd' ,select = false)

添加属性:@TableField(exist = false)

 

⑥ID自增策略

    @TableId(type = IdType.AUTO)@TableId(type = IdType.ASSIGN_ID)@TableId(type = IdType.INPUT)@TableId(type = IdType.NONE)@TableId(type = IdType.UUID)private Integer id;

雪花ID的组成

表名前缀以及雪花算法的全局配置

#mybatis的配置
mybatis-plus:
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:banner: falsedb-config:id-type: assign_idtable-prefix: tbl_

 

 ⑦多数据操作(BatchIds)

        List<Long> list = new ArrayList<>();//多数据删除um.deleteBatchIds(list);//多数据查询um.selectBatchIds(list);

 

⑧逻辑删除,实现只进行逻辑删除,而不是直接删除数据库中的表数据

添加数据库字段deleted

全局配置

#mybatis的配置
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:banner: falsedb-config:id-type: assign_id//逻辑删除logic-not-delete-value: 0logic-delete-value: 1

⑨乐观锁:解决多线程并发问题

步骤一:添加数据库字段version

 步骤二:添加字段的@version注解

步骤三:添加拦截器

步骤四:实现

⑩代码生成器

 

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 操作智能分析阻断,也可自定义拦截规则,预防误操作


http://www.ppmy.cn/devtools/14299.html

相关文章

vue cli3开发自己的插件发布到npm

具体流程如下&#xff1a; 1、创建一个vue项目 vue create project 2、编写组件 &#xff08;1&#xff09;新建一个plugins文件夹&#xff08;可自行创建&#xff09; &#xff08;2&#xff09;新建Button组件 &#xff08;3&#xff09;组件挂载&#xff0c;为组件提供 in…

js面试---闭包、作用域及作用域链、执行上下文

1、什么是闭包 闭包是指有权访问另一个函数作用域中变量的函数&#xff0c;创建闭包的最常见的方式就是在一个函数内创建另一个函数&#xff0c;创建的函数可以访问到当前函数的局部变量。 闭包的作用&#xff1a; a、使我们在函数外部能够访问到函数内部的变量。通过使用闭包…

介绍Phi-3:微软重新定义小型语言模型(SLM)的可能性

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

在mac上安装node.js及使用npm,yarn相关命令教程

1、安装node.js 官网&#xff1a;Node.js — Download Node.js 选择需要的版本&#xff0c;点击DownLoad 2、点击继续&#xff0c;直到安装成功。 2.1打开终端输入命令node -v 显示版本号则说明已安装成功 3、全局安装yarn命令 1、sudo npm install --global yarn &#xf…

k8s的网络组件有哪些,他们的作用分别是什么

一、以下是k8s的一些网络组件 1. Pod网络 Pod是Kubernetes的基本工作单元&#xff0c;通常包含一个或多个容器。Pod网络负责在Pod之间提供通信能力。Kubernetes支持多种网络解决方案&#xff0c;如&#xff1a; Calico&#xff1a;一个基于BGP的网络解决方案&#xff0c;提供…

JVM支持的可配置参数查看和分类

JVM参数大致可以分为三类: 标注指令:-开头。 这些是所有的HotSpot都支持的参数。可以用java-help 打印出来。 非标准指令: -X开头。 这些指令通常是跟特定的HotSpot版本对应的。可以用java -X打印出来。 不稳定参数: -XX 开头。 这一类参数是跟特定HotSpot版本对应的&#x…

分布式与一致性协议之CAP(二)

CAP CAP不可能三角 CAP不可能三角是指对于一个分布式系统而言&#xff0c;一致性、可用性、分区容错性指标不可兼得&#xff0c;只能从中选择两个&#xff0c; 如图所示。CAP不可能三角最初是埃里克布鲁尔(Eric Brewer)基于自己的工程实践提出的一个猜想&#xff0c;后被塞斯吉…

【行为型模式】中介者模式

一、中介者模式概述 中介者模式定义&#xff1a;用一个中介对象来封装一系列的对象交互&#xff0c;中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式。(对象行为型模式) 中介者模式…

《QT实用小工具·三十九》仿 Windows10 画图3D 的颜色选择器, 但更加强大

1、概述 源码放在文章末尾 该项目实现了仿 Windows10 画图3D 的颜色选择器&#xff0c;功能更加丰富更加强大。 项目部分代码如下所示&#xff1a; import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import QtGraphicalEffects 1.15Item {id…

【Nginx】(四) Nginx负载均衡模块的配置应用

概述 Nginx负载均衡模块是Nginx服务器中用于分配网络流量和请求的关键组件。它的作用是在多台服务器之间智能地分配客户端请求&#xff0c;以此提高应用的可用性和可靠性&#xff0c;同时提升处理大量并发请求的能力。 应用场景 问题描述&#xff1a;某金融公司在市场交易高峰…

使用 PhpMyAdmin 安装 LAMP 服务器

使用 PhpMyAdmin 安装 LAMP 服务器非常简单。按照下面所示的步骤&#xff0c;我们将拥有一个完全可运行的 LAMP 服务器&#xff08;Linux、Apache、MySQL/MariaDB 和 PHP&#xff09;。 什么是 LAMP 服务器&#xff1f; LAMP 代表 Linux、Apache、MySQL 和 PHP。它们共同提供…

【OceanBase诊断调优 】—— 建索引执行报错问题排查

背景 建索引可能因各种各样的原因产生报错&#xff0c;本文主要介绍碰到建索引报错时&#xff0c;如何定位到建索引报错的日志&#xff0c;方便后续进一步使用工具一键收集日志/根因分析&#xff0c;分析根本原因。 备注&#xff1a;此文档中涉及的语句适用于版本号>4.2.3…

iOS 17上如何恢复数据?iOS 17 数据恢复软件

“您好&#xff0c;我正在为我的 iPhone 寻找一款iOS 17 数据恢复软件。升级到 iOS 17 后&#xff0c;我丢失了 iPhone 上的所有照片、联系人和消息。有什么建议吗&#xff1f;” ——丹尼 iOS 17数据恢复软件下载 升级到iOS 17后如何恢复丢失的数据&#xff1f;由于在 iPhone…

linux权限维持(二)

3.SSH 后门 3.1 SSH 软连接后门 软连接后门的原理是利用了 PAM 配置文件的作用&#xff0c;将 sshd 文件软连接名称设置为 su &#xff0c;这样应用在启动过 程中他会去PAM 配置文件夹中寻找是否存在对应名称的配置信息 (su) &#xff0c;然而 su 在 pam_rootok 只检测 uid…

pytorch与深度学习

PyTorch是一个开源的深度学习框架&#xff0c;与深度学习密切相关。它提供了丰富的工具和函数&#xff0c;使得深度学习任务变得更加简单和高效。 以下是PyTorch与深度学习相关的几个方面&#xff1a; 张量操作&#xff1a;PyTorch中的核心数据结构是张量&#xff08;tensor&a…

c++:数据结构链表list的模拟实现

文章目录 链表的知识回顾前期工作构造节点迭代器注意构造迭代器解引用*迭代器迭代器->迭代器迭代器- -判断两个迭代器是否相等 链表empty_init构造拷贝构造swapoperatorbegin和endinsertpush_backpush_fronterasepop_backpop_frontsizeemptyclear析构 链表的知识回顾 链表是…

探索人工智能的边界:GPT 4.0与文心一言 4.0免费使用体验全揭秘!

探索人工智能的边界&#xff1a;GPT与文心一言免费试用体验全揭秘&#xff01; 前言免费使用文心一言4.0的方法官方入口进入存在的问题免费使用文心一言4.0的方法 免费使用GPT4.0的方法官方入口进入存在的问题免费使用GPT4.0的方法 前言 未来已来&#xff0c;人工智能已经可以…

【 AIGC 研究最新方向(上)】面向平面、视觉、时尚设计的高可用 AIGC 研究方向总结

目前面向平面、视觉、时尚等设计领域的高可用 AIGC 方向有以下 4 种&#xff1a; 透明图层生成可控生成图像定制化SVG 生成 本篇&#xff08;上篇&#xff09;介绍 1、2&#xff0c;而下篇将介绍 3、4。 透明图层生成 LayerDiffuse 代表性论文&#xff1a;Transparent Imag…

第55篇:创建Nios II工程之Hello_World<一>

Q&#xff1a;本期我们开始介绍创建Platform Designer系统&#xff0c;并设计基于Nios II Professor的Hello_world工程。 A&#xff1a;设计流程和实验原理&#xff1a;需要用到的IP组件有Clock Source、Nios II Professor、On-Chip Memory、JTAG UART和System ID外设。Nios I…

Yolov5 v7.0目标检测——详细记录环境配置、自定义数据处理、模型训练与常用错误解决方法(数据集为河道漂浮物)

1. Yolov5 YOLOv5是是YOLO系列的一个延伸&#xff0c;其网络结构共分为&#xff1a;input、backbone、neck和head四个模块&#xff0c;yolov5对yolov4网络的四个部分都进行了修改&#xff0c;并取得了较大的提升&#xff0c;在input端使用了Mosaic数据增强、自适应锚框计算、自…