一文带你了解如何正确使用MyBatisPlus

目录
  • 1、创建测试表
  • 2、创建 Spring Boot 工程
  • 3、导入依赖
  • 4、编写数据库配置文件
  • 5、编写代码
  • 6、CRUD 测试
  • 7、打印SQL语句

本篇文章,我们通过 MyBatis Plus 来对一张表进行 CRUD 操作,来看看是如何简化我们开发的。

1、创建测试表

创建 USER 表:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `ID` int(11) NOT NULL,
  `USER_NAME` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL,
  `USER_AGE` int(11) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

向 USER 表中插入两条数据:

INSERT INTO `user` VALUES ('1', 'IT可乐', '18');
INSERT INTO `user` VALUES ('2', 'YSOcean', '22');

打开表,发现有两条数据了:

2、创建 Spring Boot 工程

通过 IDEA 创建 Spring Boot 工程,如果不能连接 https://start.spring.io/ 网址,可以将网址变成 https://start.aliyun.com/ ,如下所示:

3、导入依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>    

首先mybatis-plus 我们导入最新版 3.3.2。另外,由于我数据采用的是 MySql,所以这里导入了 Mysql 的连接依赖。

另外,为了简化JavaBean 类的书写,我这里额外导入一个 lombok 插件依赖。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

通过这个依赖的相关注解,我们可以不用书写繁琐的 get/set 方法。

4、编写数据库配置文件

在 springboot 项目的 resource 目录下,新建 application.yml 文件,添加如下内容:

server:
  port: 8082

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
    # >= 6.x: com.mysql.cj.jdbc.Driver
    # <= 5.x: com.mysql.jdbc.Driver
    driver-class-name: com.mysql.cj.jdbc.Driver

注意:url里面填写的 mybatisplus 是我的数据库名称,注意修改,username和password分别填写自己的数据库连接名称和密码。

5、编写代码

①、实体类User.java

@Getter
@Setter
public class User {
    private Long id;

    private String userName;
    
    private String userAge;

}

②、创建UserMapper 接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ys.mybatisplusstudy.entry.User;

public interface UserMapper extends BaseMapper<User> {
}

③、启动类增加@MapperScan注解

@SpringBootApplication
@MapperScan("com.ys.mybatisplusstudy.mapper")
public class MybatisplusstudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisplusstudyApplication.class, args);
    }

}

如果不想在启动类加 @MapperScan 注解,也可在每个 Mapper 接口上增加 @Mapper 注解。

所有配置上面都以完成,是不是很简单,接下来我们对这张表进行CRUD 测试。

6、CRUD 测试

我们在编写 UserMapper 接口时,其继承了一个 BaseMapper 接口:

public interface UserMapper extends BaseMapper<User> {
}

我们进入到 BaseMapper 内部,发现其结构如下:

这些方法便是我们常用的增删改查了,下面我们分别演示几个常用的。

①、insert:新增一条记录

@SpringBootTest
class MybatisplusstudyApplicationTests {

    @Autowired
    private UserMapper userMapper;

    /**
     * 新增一条记录
     */
    @Test
    public void testInsert(){
        User user = new User();
        user.setId(3L);
        user.setUserName("test insert");
        user.setUserAge("1");
        int insert = userMapper.insert(user);
        System.out.println("影响记录数:"+insert);
    }

}

执行完毕后,我们查看数据库:

②、delete:删除记录

/**

 * 根据id删除一条记录
   */
   @Test
   public void testDeleteById(){
   int num = userMapper.deleteById(3L);
   System.out.println("删除的记录数为:"+num);
   QueryWrapper wrapper = new QueryWrapper();
   wrapper.eq("id",3L);
   userMapper.delete(wrapper);
   }

/**

 * 构造相关条件删除记录
   */
   @Test
   public void testDelete(){
   QueryWrapper wrapper = new QueryWrapper();
   wrapper.eq("USER_NAME","test insert");
   int num = userMapper.delete(wrapper);
   System.out.println("删除的记录数为:"+num);
   }

③、update:修改记录

/**

 * 根据id修改
   */
   @Test
   public void testudpateById(){
   User user = new User();
   user.setId(3L);
   user.setUserName("test update");
   int num = userMapper.updateById(user);
   System.out.println("修改的记录数为:"+num);
   }

④、select:查询记录

/**

 * 查询User表所有记录
   */
   @Test
   public void testSelectAll(){
   List<User> users = userMapper.selectList(null);
   users.forEach(x-> System.out.println(x.getId()+"-"+x.getUserName()+"-"+x.getUserAge()));
   }

/**

 * 查询指定记录
   */
   @Test
   public void testSelectWrapper(){
   QueryWrapper wrapper = new QueryWrapper();
   wrapper.eq("user_name","IT可乐");
   List<User> users = userMapper.selectList(wrapper);
   users.forEach(x-> System.out.println(x.getId()+"-"+x.getUserName()+"-"+x.getUserAge()));
   }

发现没有,做增删改查是如此的丝滑流畅,都不用写SQL语句了。

当然,这都只是单表的简单玩法,后面我们会介绍高阶玩法。

7、打印SQL语句

这里补充一个小知识点,通过如下配置,我们可以查看执行的 SQL 语句日志。

在 applicatio.yml 文件中,进行如下配置:

# 配置slq打印日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

当然,这种配置只是把 SQL 日志打印到控制台便于我们调试,后面会介绍更加强大的 SQL 分析工具。

到此这篇关于一文带你了解如何正确使用MyBatisPlus的文章就介绍到这了,更多相关MyBatisPlus使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatisPlus代码生成器的使用示例

    目录 导入依赖 表结构 当前项目结构 配置代码生成器 1.globalConfig 全局策略配置 2.dataSourceConfig 数据源配置 AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.Controller 等各个模块的代码,极大的提升了开发效率. 导入依赖 <dependency> <groupId>com.baomidou</

  • mybatis plus常用注解的具体使用

    目录 1.@TableName a>问题 b>通过@TableName解决问题(推荐) c>通过全局配置解决问题(了解) 2.@TableId a>问题 b>通过@TableId解决问题 c>@TableId的value属性 d>@TableId的type属性 e>雪花算法 3.@TableField a>情况1 b>情况2 4.@TableLogic a>逻辑删除 b>实现逻辑删除 1.@TableName 经过以上的测试,在使用M

  • 一文详解Mybatis-plus的介绍与使用

    目录 Mybatis-Plus简介 Mybatis-Plus特性 Mybatis-Plus实操 数据库相关配置 小项目运行配置 添加数据 删除数据 修改数据 查询数据 小结 Mybatis-Plus简介 Mybatis-Plus 是 MyBatis 的一个增强工具,专门针对于传统MyBatis开发中sql需要手动进行映射配置繁琐缺点的一款框架技术,这款框架技术提供了十分丰富的api供开发者们使用,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生.MyBatis-Plus 已

  • MybatisPlus代码生成器的使用方法详解

    搭建测试的数据库和表数据的SQL /* Navicat Premium Data Transfer Source Server : MySQL8.0 Source Server Type : MySQL Source Server Version : 80022 Source Host : localhost:3306 Source Schema : mybatisplus Target Server Type : MySQL Target Server Version : 80022 File

  • 一文带你了解如何正确使用MyBatisPlus

    目录 1.创建测试表 2.创建 Spring Boot 工程 3.导入依赖 4.编写数据库配置文件 5.编写代码 6.CRUD 测试 7.打印SQL语句 本篇文章,我们通过 MyBatis Plus 来对一张表进行 CRUD 操作,来看看是如何简化我们开发的. 1.创建测试表 创建 USER 表: DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (   `ID` int(11) NOT NULL,   `USER_NAME` varchar(32

  • 一文带你了解CNN(卷积神经网络)

    目录 前言 一.CNN解决了什么问题? 二.CNN网络的结构 2.1 卷积层 - 提取特征 卷积运算 权重共享 稀疏连接 总结:标准的卷积操作 卷积的意义 1x1卷积的重大意义 2.2 激活函数 2.3 池化层(下采样) - 数据降维,避免过拟合 2.4 全连接层 - 分类,输出结果 三.Pytorch实现LeNet网络 3.1 模型定义 3.2 模型训练(使用GPU训练) 3.3 训练和评估模型 前言   在学计算机视觉的这段时间里整理了不少的笔记,想着就把这些笔记再重新整理出来,然后写成Bl

  • 一文带你了解Go语言中的单元测试

    目录 基本概念 示例一:取整函数基本测试 示例二:Fail()函数 示例三:FailNow函数 实例四:Log和Fetal函数 基本概念 上一节提到,代码完成的标准之一还包含了单元测试,这部分也是很多开发流程中不规范的地方.写过单元测试的开发人员应该理解,单元测试最核心的价值是为了证明:为什么我写的代码是正确的?也就是从逻辑角度帮你检查你的代码.但是另外一方面,如果从单元测试覆盖率角度来看,单元测试也是非常耗时的,几乎是三倍于你代码的开发时间,所以在很多迭代速度非常快的项目中,单元测试就几乎没人

  • 一文带你了解Go语言中的类型断言和类型转换

    目录 类型断言 类型判断 为什么需要断言 类型转换 什么时候使用类型转换 类型为什么称为转换 类型结论 在Go中,类型断言和类型转换是一个令人困惑的事情,他们似乎都在做同样的事情. 下面是一个类型断言的例子: var greeting interface{} = "hello world" greetingStr := greeting.(string) 接着看一个类型转换的例子: greeting := []byte("hello world") greeting

  • 一文带你了解Golang中interface的设计与实现

    目录 前言 接口是什么 iface 和 eface 结构体 _type 是什么 itab 是什么 生成的 itab 是怎么被使用的 itab 关键方法的实现 根据 interfacetype 和 _type 初始化 itab 接口断言过程总览(类型转换的关键) panicdottypeI 与 panicdottypeE iface 和 eface 里面的 data 是怎么来的 convT* 方法 Java 里面的小整数享元模式 总结 在上一篇文章<go interface 基本用法>中,我们了

  • 一文带你了解Golang中的WaitGroups

    目录 什么是WaitGroups 如何使用WaitGroups 为什么使用WaitGroups而不是channel 需要注意的一件事 总结 什么是WaitGroups WaitGroups是同步你的goroutines的一种有效方式.想象一下,你和你的家人一起驾车旅行.你的父亲在一个条形商场或快餐店停下来,买些食物和上厕所.你最好想等大家回来后再开车去地平线.WaitGroups帮助你做到这一点. WaitGroups是通过调用标准库中的sync包来定义的. var wg sync.WaitGr

  • 一文带你深入理解Go语言中的sync.Cond

    目录 sync.Cond 是什么 适用场景 sync.Cond 的基本用法 NewCond 创建实例 Wait 等待条件满足 Signal 通知一个等待的 goroutine Broadcast 通知所有等待的 goroutine sync.Cond 使用实例 为什么要用 sync.Cond close channel 广播实例 sync.Cond 基本原理 sync.Cond 的设计与实现 sync.Cond 模型 notifyList 结构体 sync.Cond 的方法 Wait 方法 Si

  • 一文带你掌握Golang Interface原理和使用技巧

    目录 1. interface 的基本概念 2. interface 的原理 3. interface 的使用技巧 3.1 使用空接口 3.2 使用类型断言 3.3 使用类型switch 3.4 使用接口组合 3.5 将方法定义在interface类型中 3.6 使用匿名接口嵌套 4. interface 的常见使用场景 4.1 依赖注入 4.2 测试驱动开发 4.3 框架设计 5. 总结 Golang 中的 interface 是一种非常重要的特性,可以让我们写出更加灵活的代码.interfa

  • 一文带你了解 C# DLR 的世界(DLR 探秘)

    在很久之前,我写了一片文章详解C# 匿名对象(匿名类型).var.动态类型 dynamic,可以借鉴.因为那时候是心中想当然的认为只有反射能够在运行时解析对象的成员信息并调用成员方法.后来也是因为其他的事一直都没有回过头来把这一节知识给补上,正所谓亡羊补牢,让我们现在来大致了解一下DLR吧. DLR 全称是 Dynamic Language Runtime(动态语言运行时).这很容易让我们想到同在C#中还有一个叫 CLR 的东西,它叫 Common Language Runtime.那这两者有什

  • 做java这么久了居然还不知道JSON的使用(一文带你了解)

    JSON(JavaScript Object Notation, NS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的 文本格式 来存储和表示数据. 简洁和清晰的层次结构使得JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率. 在JavaScript语言中,一切都是对象.因此,任何JavaScript 支持的类型都可以通过JSON来表示,例如字符串.数字.对象.数组等.看看他的要求和语法格式: 对象表示为键值对

随机推荐