Spring Boot整合MyBatis-Plus框架快速上手

news2025/3/13 16:22:18

在这里插入图片描述
最开始,我们要在Java中使用数据库时,需要使用JDBC,创建Connection、ResultSet等,然后我们又对JDBC的操作进行了封装,创建了许多类似于DBUtil等工具类。再慢慢的,出现了一系列持久层的框架:Hibernate、JPA和MyBatis等。

其实利用MyBatis 来进行持久层的开发已经大大减少了工作人员的工作量了,但它的使用还是需要一定的门槛的。Mybatis-Plus的出现,进一步降低了这道槛。那我们今天就来看看,Mybatis-Plus到底是如何进一步实现MyBatis的增强的。

1.MyBatis-Plus简介

MyBatis-Plus官网地址:

https://baomidou.com

MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MP的愿景是成为MyBatis最好的搭档,就像魂斗罗中的1P、2P,基友搭配,效率翻倍。

MyBatis-Plus特性

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

支持数据库

任何能使用MyBatis进行CRUD,并且支持标准SQL的数据库,具体支持情况如下:

  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb。
  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库。

使用SpringBoot整合MyBatis-Plus

MyBatis-Plus部署配置

1.引入依赖。在pom.xml文件中添加Mybatis-Plus依赖。


<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
  <!-- MyBatis依赖启动器 -->
        <!--
  <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
  </dependency>
        -->
  <!-- MySQL数据库连接驱动 -->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
  </dependency>
  <!-- 阿里巴巴的Druid数据源依赖启动器 -->
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.17</version>
  </dependency>
  <!-- 添加Mybatis-Plus依赖 -->
  <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
  </dependency>
</dependencies>

2.编写实体类。在springbootdata数据库中创建products商品信息表并插入数据。

CREATE TABLE t_product (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50), #商品名称
  price DOUBLE,
  flag VARCHAR(2), #上架状态
  goods_desc VARCHAR(100), #商品描述
  images VARCHAR(400), #商品图片
  goods_stock INT, #商品库存
  goods_type VARCHAR(20), #商品类型
  created_user VARCHAR(20) COMMENT '日志-创建人',
        created_time DATETIME COMMENT '日志-创建时间',
        modified_user VARCHAR(20) COMMENT '日志-最后修改执行人',
        modified_time DATETIME COMMENT '日志-最后修改时间'
);

INSERT INTO t_product VALUES (
            NULL,
            'HUAWEI P60', 
            6999, 
            '1', 
            '华为P60 5G手机 分期 麒麟990 晨曦金 8+256GB', 
            'https://img14.360buyimg.com/5f4da578E7c6efde1/2cd53a53083ab2ed.jpg', 
            99, 
            '1',
            'admin', 
            '2022-11-04 15:46:55', 
            'Tom', 
            '2022-11-04 15:46:55');

3.在com.cy.domain包下创建Product实体类。


package com.cy.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;

@Data
@TableName("t_product") // 表明注解,标识实体类对应的表
public class Product implements Serializable {
    @TableId(type = IdType.AUTO) // 注解注解
    private Integer id;
    private String name;
    private double price;
    private String flag;
    // @TableField("goods_desc") // 字段注解(非主键)
    private String goodsDesc;
    private String images;
    private long goodsStock;
    private String goodsType;
    private String createdUser;
    private Date createdTime;
    private String modifiedUser;
    private Date modifiedTime;
}

4.定义Mapper。在com.cy.mapper包下创建ProductMapper接口并继承BaseMapper接口。

package com.cy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cy.domain.Product;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface ProductMapper extends BaseMapper<Product> {

}

MyBatis-Plus的Mapper层接口需要配置扫描,配置方式有两种:

  1. 直接在Mapper层使用@Mapper注解修饰Mapper接口。
  2. 在项目的启动类上添加@MapperScan(“com.cy.mapper”)包扫描。
    5.配置properties。在application.properties配置文件中将原有的MyBatis配置删除,改写为MyBatis-Plus的配置。
# 开启驼峰命名匹配映射
# mybatis.configuration.map-underscore-to-camel-case=true
# 配置MyBatisXML配置文件位置
# mybatis.mapper-locations=classpath:mapper/*.xml
# 配置XML映射文件中指定的实体类别名路径
# mybatis.type-aliases-package=com.cy.domain

# 输出SQL语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 配置MyBatis的XML配置文件位置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# 配置XML映射文件中指定的实体类别名路径
mybatis-plus.type-aliases-package=com.cy.domain

说明:MyBatis-Plus默认开启了驼峰命名匹配映射。

MyBatis-Plus增删改查操作

1.新增数据操作。在com.cy测试包下编写MyBatisPlusTests测试类,并添加插入数据操作的测试方法。


package com.cy;
import com.cy.domain.Product;
import com.cy.mapper.ProductMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MyBatisPlusTests {
  @Autowired
  private ProductMapper productMapper;

  @Test
  public void test01() {
    Product product = new Product();
    product.setName("小米手机");
    product.setPrice(2999.0);
    product.setFlag("1");
    product.setGoodsDesc("骁龙8+ 旗舰处理器 | 徕卡光学镜头 | 徕卡原生双画质 | 大师镜头包");
    productMapper.insert(product);
  }
}

2.删除数据操作。


@Test
public void test02() {
  int row = productMapper.deleteById(1);
  System.out.println("row = " + row);
}

@Test
public void test03() {
  ArrayList<Integer> ids = new ArrayList<>(){{
    add(2);
    add(3);
    add(4);
  }};
  int row = productMapper.deleteBatchIds(ids);
  System.out.println("row = " + row);
}

@Test
public void test04() {
  Map<String, Object> columnMap = new HashMap<>(){{
    put("name", "小米");
    put("price", 1999);
  }};
  int row = productMapper.deleteByMap(columnMap);
  System.out.println("row = " + row);
}

@Test
public void test05() {
  // 条件构造器
  UpdateWrapper<Product> queryWrapper = new UpdateWrapper<>();
  queryWrapper.gt("price", 2000).or().likeRight("name", "小米");
  int row = productMapper.delete(queryWrapper);
  System.out.println("row = " + row);
}

3.修改数据操。

@Test
public void test06() {
  Product product = new Product();
  product.setId(3);
  product.setName("小米");
  product.setPrice(1999);
  int row = productMapper.updateById(product);
  System.out.println("row = " + row);
}

@Test
public void test07() {
  Product product = new Product();
  product.setId(3);

  // 条件构造器
  UpdateWrapper<Product> updateWrapper = new UpdateWrapper<>();
  // set():设置更新SQL的SET片段,ge():大于等于
  updateWrapper.set("name", "小米Pro").set("price", 3999).ge("goods_stock", 10);
  int row = productMapper.update(product, updateWrapper);
  System.out.println("row = " + row);
}

现在你知道在SpringBoot中怎么整合Mybatis-Plus了吗?如果你还有其他问题,可以在评论区留言哦。

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

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

相关文章

【Linux驱动】驱动框架的进化 | 总线设备驱动模型

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f969;驱动框架的进化&#x1f960;分层&#x1f960;面向对象&#x1f960;编程&am…

一台服务器​最大并发 tcp 连接数多少?65535?

首先&#xff0c;问题中描述的65535个连接指的是客户端连接数的限制。 在tcp应用中&#xff0c;server事先在某个固定端口监听&#xff0c;client主动发起连接&#xff0c;经过三次握手后建立tcp连接。那么对单机&#xff0c;其最大并发tcp连接数是多少呢&#xff1f; 如何标…

将elementUI,NaiveUI的progress环形进度条设置为渐变色

需求 &#xff1a;进度条要有一个渐变效果。效果图&#xff1a; NaiveUI和elementUI的官方progress组件都是只能设置一种颜色&#xff0c;不符合需求所以改一下。 其实NaiveUI和elementUI设置进度条的实现方式基本一样都是使用svg渲染出两个path&#xff0c;第一个是底色&…

教你一分钟弄清屏幕SPI接口名称

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 快速入门ESP32—— platformIO添加开源库和自己的开发库 一分钟弄清屏幕SPI接口名称 前言一、屏幕SPI接口名称二、与单片机连接总结 前言 最近&#xff0c;我在捣鼓CD屏幕的SP…

服务器系统时间不同步如何处理

在分布式计算环境中&#xff0c;服务器系统时间的同步至关重要。然而&#xff0c;由于各种原因&#xff0c;服务器系统时间不同步的问题时有发生,这可能会导致严重的问题&#xff0c;如日志不准确、证书验证失败等。下面我们可以一起探讨下造成服务器系统时间不同的原因以及解决…

理解io/nio/netty

一、io io即input/output&#xff0c;输入和输出 1.1 分类 输入流、输出流&#xff08;按数据流向&#xff09; 字节流&#xff08;InputStream/OutputStream&#xff08;细分File/Buffered&#xff09;&#xff09;、字符流(Reader/Writer&#xff08;细分File/Buffered/pu…

iClient for JavaScript如何以mvt矢量瓦片的形式加载数据服务

刘大 这里写目录标题 前言1.iServer中的预览页面2.iClient for JavaScript加载2.1 构建Style2.2 iCient加载2.2.1Leaflet & MapboxGL2.2.2 OpenLayers 前言 在提到查看iServer REST数据服务的概况的时候&#xff0c;大家总会想到说&#xff0c;通过发布对应的地图服务或者…

一文读懂SoBit 跨链桥教程

从BTC网络到Solana网络桥接BRC20 1.打开SoBit平台&#xff1a;在您的网络浏览器中启动SoBit Bridge应用程序。 2.连接您的钱包&#xff1a; 选择SoBit界面右上角的比特币网络来连接您的数字钱包。 3.选择源链、目标链和您想桥接的代币&#xff1a; 从下拉菜单中选择’BTC’作为…

JVM入门到入土-Java虚拟机寄存器指令集与栈指令集

JVM入门到入土-Java虚拟机寄存器指令集与栈指令集 HotSpot虚拟机中的任何操作都需要入栈和出栈的步骤。 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的。不同平台CPU架构不同&#xff0c;所以不能设计为基于寄存器的。优点是跨平台&#xff0c;指令集小&#x…

k8s---kubernets

目录 一、Kurbernetes 1.2、K8S的特性&#xff1a; 1.3、docker和K8S&#xff1a; 1.4、K8S的作用&#xff1a; 1.5、K8S的特性&#xff1a; 二、K8S集群架构与组件&#xff1a; 三、K8S的核心组件&#xff1a; 一、master组件&#xff1a; 1、kube-apiserver&#xff1…

【Spring实战】07 JPA

文章目录 1. 定义2. 出现原因3. 添加依赖4. 使用1&#xff09;创建 Repository 接口2&#xff09;自定义查询方法&#xff08;非必须&#xff09;3&#xff09;创建实体类4&#xff09;调用方法 5. 验证6. 优点7. 缺点8. 详细代码总结 1. 定义 Spring Data JPA 是 Spring 提供…

C# 编写简单二维码条形码工具

C# 二维码条形码工具 该工具简单实现了二维码条形码生成与识别功能&#xff0c;识别方式&#xff1a;通过摄像头实时识别或通过图片文件识别。 using AForge.Genetic; using AForge.Video.DirectShow; using System; using System.Collections.Generic; using System.Component…

实习知识整理6:前后端利用jQuery $.ajax数据传输的四种方式

方式1&#xff1a;前端发送key/value(String字符串)&#xff0c;后台返回文本 前端&#xff1a; <input id"test1" type"button" value"前端发送key/value(String字符串)&#xff0c;后台返回文本"/> $(function() {$("#test1&quo…

YHZ001 Python 简介

配套视频链接: YHZ001 Python 简介 目录 &#x1f649; Python的历史&#x1fab1; Python的作者&#x1f98a; Python 的优缺点&#x1f417; Python 的应用领域&#x1f41e; Python 哲学&#x1f430; Python 解释器 &#x1f649; Python的历史 1989年圣诞节&#xff1a; …

数据智慧:C#中编程实现自定义计算的Excel数据透视表

前言 数据透视表&#xff08;Pivot Table&#xff09;是一种数据分析工具&#xff0c;通常用于对大量数据进行汇总、分析和展示。它可以帮助用户从原始数据中提取关键信息、发现模式和趋势&#xff0c;并以可视化的方式呈现。 在数据透视表中&#xff0c;数据分析师通常希望进…

Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Redis Streams在Spring Boot中的应用&#xff1a;构建可靠的消息队列解决方案 引言前言Redis Streams的基本概念和特性1. 日志数据结构2. 消息和字段3. 消费者组4. 消息ID5. 实时和历史数据处理6. 性能…

1.决策树

目录 1. 什么是决策树? 2. 决策树的原理 2.1 如何构建决策树&#xff1f; 2.2 构建决策树的数据算法 2.2.1 信息熵 2.2.2 ID3算法 2.2.2.1 信息的定义 2.2.2.2 信息增益 2.2.2.3 ID3算法举例 2.2.2.4 ID3算法优缺点 2.2.3 C4.5算法 2.2.3.1 C4.5算法举例 2.2.4 CART算法 2.2.4…

智能优化算法应用:基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.孔雀算法4.实验参数设定5.算法结果6.参考文献7.MA…

机械革命极光Pro重装Win10系统图解

机械革命极光Pro是性能优秀的笔记本电脑&#xff0c;深受广大用户的喜欢&#xff0c;现在用户想给笔记本电脑重新安装一下操作系统&#xff0c;但不知道重装系统的详细步骤。下面小编将带来机械革命极光Pro笔记本电脑重装系统Win10版本的步骤介绍&#xff0c;帮助更多的用户完成…

Python 基础面试第三弹

1. 获取当前目录下所有文件名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import os def get_all_files(directory): file_list []<br> # <code>os.walk</code>返回一个生成器&#xff0c;每次迭代时返回当前目录路径、子目录列表和文件列表 for…