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依赖。

java 复制代码
<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商品信息表并插入数据。

java 复制代码
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实体类。

java 复制代码
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接口。

java 复制代码
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的配置。
java 复制代码
# 开启驼峰命名匹配映射
# mybatis.configuration.map-underscore-to-camel-case=true
# 配置MyBatis的XML配置文件位置
# 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测试类,并添加插入数据操作的测试方法。

java 复制代码
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.删除数据操作。

java 复制代码
@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.修改数据操。

java 复制代码
@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了吗?如果你还有其他问题,可以在评论区留言哦。

相关推荐
小咕聊编程32 分钟前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
追逐时光者7 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_7 小时前
敏捷开发流程-精简版
前端·后端
苏打水com8 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
lang201509288 小时前
MyBatis Mapper XML 核心详解
xml·mybatis
西瓜er8 小时前
JAVA:Spring Boot 集成 FFmpeg 实现多媒体处理
java·spring boot·ffmpeg
间彧9 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧9 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧9 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧9 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端