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

在这里插入图片描述
最开始,我们要在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 {@Autowiredprivate ProductMapper productMapper;@Testpublic 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.mzph.cn/news/579145.shtml

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

相关文章

记一次接口交互is开头的属性序列化后“is”丢失问题

问题背景&#xff1a; 今天在做项目联调时调用别人的第三方接口时&#xff0c;发现字段传递不对导致参数传递异常的问题&#xff0c;当时还很奇怪&#xff0c;明白传好着呢&#xff0c;怎么就好端端的出现字段不对的情况呢&#xff1f; 查看发现该字段为boolean类型的isIsRef…

Linux下安装MySQL

Linux下安装MySQL 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html#downloads 解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar 再移动并重命名一下 mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql创建mysql用户组和用户并修改权限…

【回溯】符号三角形问题Python实现

文章目录 [toc]问题描述回溯法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;回溯法 问题描述 下图是由 14 14 14个“ ”和 14 14 14个“ − - −”组成的符号三角形&#xff0c; 2 2 2个同号下面都是” “&#xff0c; 2 2 2个异号下面都是“ −…

QT编译并部署QtMqtt相关环境+跑测demo【超详细教程】

文章目录 概要整体架构流程▷下载指定版本的QMqtt源码&#xff1a;▷编译后同步MQTT相关文件&#xff1a; 技术名词解释技术实现步骤详解一、编译源码1、编译报错2、解决思路3、编译通过 二、继续完善mqtt应用环境1、打开编译生成的shadow build文件夹2、同步lib3、同步bin4、同…

【Git-IDEA】在 IDEA 中使用 Git(clone、pull、push、merge、建立本地分支与远程分支的连接)

【Git-IDEA】在 IDEA 中使用 Git&#xff08;clone、pull、push、merge、建立本地分支与远程分支的连接&#xff09; 1&#xff09;Gitee2&#xff09;配置 Git3&#xff09;初始化本地仓库4&#xff09;连接远程仓库5&#xff09;clone5.1.方式一5.2.方式二 6&#xff09;分支…

react常用Hooks

Hooks是可从函数组件“挂钩”到React状态和生命周期功能的函数。 Hooks在class中是无效的——可在没有class的情况下使用React。&#xff08;不推荐重写已有组件&#xff0c;但是如果愿意&#xff0c;可以在一些新的组件中使用 Hooks。&#xff09;React提供一些内置的 Hooks&a…

5G NR无线蜂窝系统的信道估计器设计

文章目录 DMRS简介DMRS类型DMRS频域密度 信道估计实验仿真实验参数实验实验结论 DMRS简介 DMRS类型 类型A&#xff1a;DMRS位于时隙的第二个或第三个OFDM符号&#xff0c;由14个OFDM符号组成&#xff0c;当数据占据大部分时隙时使用A型映射。 类型B&#xff1a;用在URLLC中&a…

鸿蒙系列--组件介绍之其他基础组件(上)

上回介绍了基础组件中最常用的组件常用的基础组件&#xff0c;接下来还有其他基础组件 一、Blank 描述&#xff1a;空白填充组件 功能&#xff1a;在容器主轴方向上&#xff0c;具有自动填充容器空余部分的能力。只有当父组件为Row/Column时生效 子组件&#xff1a;无 Blan…

Spring之提前编译:AOT

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

【Java进阶篇】深拷贝和浅拷贝的理解(保姆级文献)

✔️深拷贝和浅拷贝的理解 在计算机内存中&#xff0c;每个对象都有一个地址&#xff0c;这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时&#xff0c;实际上是将该对象的地址赋值给变量。因此&#xff0c;如果我们将一个对象复制到另一个变量中&#xff0c…

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

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

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

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

Elasticsearch:无需搜索 “Christmas” 即可找到有关圣诞节的书籍

随着假期的临近&#xff0c;我期待着变得舒适&#xff0c;拿起一本新书&#xff0c;享受轻松的时光。 但是使用搜索栏在线发现图书并不像看起来那么容易......大多数零售搜索引擎仅依赖于关键字搜索&#xff0c;当我们确切地知道我们正在寻找什么书名时&#xff0c;这很好&…

分布式事务是什么

分布式事务是企业集成中的一个技术难点&#xff0c;也是每一个分布式系统架构中都会涉及到的一个东西&#xff0c;特别是在微服务架构中&#xff0c;几乎可以说是无法避免&#xff0c;本文就分布式事务来简单聊一下。 数据库事务 我们先从数据库事务说起。数据库事务可能大家…

【大数据存储与处理】开卷考试总复习笔记

实验部分 一、 HBase 的基本操作 1. HBase Shell入门 # 进入HBase Shell环境 hbase shell2. HBase创建数据库表 # 创建表命令 create user, info1, info2 # 查看所有表 list # 查看表结构 describe user3. HBase数据操作 数据插入 put user, 0001, info1:name, jack put us…

傻瓜式教学Docker 使用docker compose部署 php nginx mysql

首先你可以准备这个三个服务,也可以在docker compose 文件中 直接拉去指定镜像,这里演示的是镜像服务已经在本地安装好了,提供如下: PHP # 设置基础镜像 FROM php:8.2-fpm# install dependencies RUN apt-get update && apt-get install -y \vim \libzip-dev \libpng…

智慧医疗平台开发:在线问诊系统源码搭建详解

如今&#xff0c;在线问诊系统的出现为患者提供了更为灵活、便捷的医疗服务。我们在开发系统之前&#xff0c;应该先简单了解系统的功能以及相关的技术。 一、核心功能需求 -用户注册和登录&#xff1a;用户可以通过注册账户&#xff0c;或者使用第三方登录方式进入系统。 …

高速风筒4套硬件案子谁会成为王者----【其利天下技术】

关于高速风筒的硬件电路&#xff0c;从MCU的角度来说&#xff0c;严格意义上是可以区分为四种硬件电路的&#xff0c;当前市场上这四种硬件电路也是并行存在的。所以有朋友电话问我&#xff0c;我怎么看待这四种硬件方案的优劣势和未来的&#xff1f;今天特意根据个人视角&…

基层医疗卫生信息可视化:Flask、MySQL、Echarts的综合利用

基层医疗卫生信息可视化&#xff1a;Flask、MySQL、Echarts的综合利用 正文&#xff1a; 社区卫生健康数据可视化是提升医疗服务水平和促进健康管理的有效手段。本文将介绍一种基于Flask、MySQL和Echarts技术的社区卫生健康数据可视化系统&#xff0c;数据源来自市基层医疗卫生…

Apache RocketMQ,构建云原生统一消息引擎

本文整理于 2023 年云栖大会林清山带来的主题演讲《Apache RocketMQ 云原生统一消息引擎》 演讲嘉宾&#xff1a; 林清山&#xff08;花名&#xff1a;隆基&#xff09;&#xff0c;Apache RocketMQ 联合创始人&#xff0c;阿里云资深技术专家&#xff0c;阿里云消息产品线负…