百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

mybatis-plus保姆级入门教程,手把手教你轻松实现增删改查

bigegpt 2025-02-24 15:08 8 浏览

一、前言

通过前几期的基础教学,想必大家都已经掌握springboot项目的创建及项目启动等基本内容了吧(如果还没掌握,请去复习我上几期的内容,好伐?)。

今个儿我要来整点高级的,使用组件的方式来轻松实现数据库交互,大家想不想学?好的,看到大家的积极性如日中天啊,老夫深感欣慰。那bug菌将不遗余力地传授给大家,同时也希望大家在学习的过程中,打好基础,认真听哦。

上一期我们是通过注入jdbc模板类进行数据库查询对吧,虽然这种交互方式可以,但是面对不常用数据类型,就不好使了,所以我要教大家一种最省事最方便的,那就是mybatis-plus,超级好用的一个组件,省去大量手写sql的体力活,让你一切查询变得简单而又透彻。这期我的目的就是引领你们入门。 具有很好的教学价值,希望小伙伴们根据这篇文章可以有所收获,建议小伙伴们先收藏后阅读哦。

首先,我们先来了解一下,mybatis-plus为何物?与mybatis有何不同?最关键也是最重要的部分,它如何使用?

好的,别着急,咱们接着往下看。

二、mybatis-plus概览

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

愿景:

我们的愿景是成为 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 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。

  • mysql,oracle,db2,h2,hsql,sqlite,postgresql,sqlserver,Phoenix,Gauss ,clickhouse,Sybase,OceanBase,Firebird,cubrid,goldilocks,csiidb
  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库

#框架结构

四、mybatis-plus实战演练

1、老规矩,使用前先引入pom依赖;添加如下:



    com.baomidou
    mybatis-plus-boot-starter
    3.2.0




    com.baomidou
    mybatis-plus-generator
    3.2.0

复制代码

ps:如果有小伙伴图省事,可以使用代码生成器,超级方便,但由于此篇是入门级教学,那我就手把手带着大家手动创建控制器,分发器等文件吧,日后再带大家熟悉使用自动生成器,行吧?感兴趣的小伙伴也可以参考bug菌写的这篇《mybatis-plus代码生成器入门教学》,自己动手实战一下,很简单的。

2、引入完依赖之后,结合阿里开发规范,对业务逻辑进行分层,本着低耦合高内聚的目的而去。

3、由于我前几期已经创建了一个 UserController 对吧,接着来创建实体类,UserService接口层,UserServiceImpl接口实现层,及最后的UserMapper 持久层。

UserEntity

  • **@TableName(“table_name”):**指定数据库表名。
  • **@TableId :**指定type = IdType.AUTO 表示数据库id为自增型。
  • **@TableField(value = "name") :**指定数据库字段名。
  • 添加get set方法即可。

    package com.example.demo.Entity; import
    com.baomidou.mybatisplus.annotation.IdType; import
    com.baomidou.mybatisplus.annotation.TableField; import
    com.baomidou.mybatisplus.annotation.TableId; import
    com.baomidou.mybatisplus.annotation.TableName; /
    **
    用户基本信息实体 */ @TableName("user") public class UserEntity {

  • @TableId(value = "id", type = IdType.AUTO) //表示该id为自增,新增时候不需要手动设置id。
private Integer id;
@TableField(value = "name")
private String name;
@TableField(value = "age")
private Integer age;
@TableField(value = "sex")
private String sex;
@TableField(value = "address")
private String address;
public Integer getId() {
    return id;

} public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }

**

然后再多添加几条数据吧!方便后续查询接口浏览查询。

UserService

编写两个接口!分别为不带参数与带一个参数,作为演示:具体代码如下

package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.Entity.UserEntity;
import java.util.List;

/**
 * 用户管理业务层接口
 */
public interface UserService extends IService {

    /**   
    * 不分页查询所有用户信息
    */
    List getUsers();

    /**
    * 根据性别查询所有用户
    * 
    * @param sex 性别
    */
    List getUsersBySex(String sex);
}

UserServiceImpl

继承接口实现上方两方法。

由于是使用了该mybatis-plus的查询方式,顾语法有些不一样。这个后续给大家详细讲讲。

package com.example.demo.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.Entity.UserEntity;
import com.example.demo.dao.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * 用户管理业务层
 */
@Service
public class UserServiceImpl extends ServiceImpl implements UserService {
   
    /**
     * 不分页查询所有用户信息
     */
    @Override
    public List getUsers() {
        //直接可使用IService 封装好的一些方法,这个自行点进去看。
        return this.list();
    }

    /**
     * 根据性别查询所有用户
     *
     * @param sex 性别
     */
    @Override
    public List getUsersBySex(String sex) {
        //条件构造器
        QueryWrapper wrapper = new QueryWrapper<>();
        //eq 代表“ = ”;例如 eq("sex", "男") ---> sex = '男';等同于拼接在sql语句后边的where条件。
        wrapper.eq("sex",sex);
        //将条件带入返回
        List list = this.list(wrapper);
        //返回数据
        return list;
    }
}

UserMapper

package com.example.demo.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.Entity.UserEntity;
import org.springframework.stereotype.Component;

/**
 * 用户管理持久层
 */
@Component
public interface UserMapper extends BaseMapper {
}

以上 添加就大功告成了;

最后是controller类,调用刚才我们写的那两接口进行访问,看看结果如何

分发器代码如下:

package com.example.demo.controller;
import com.example.demo.Entity.UserEntity;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
 * 用户管理分发器
 */
@RestController@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;
    /**
     * 不分页查询所有用户信息
     */
    @GetMapping("/get-users")
    public List getUserList() {
        return userService.getUsers();
    }

    /** 
     * 根据性别查询所有用户
     * 
     * @param sex 性别
     */
    @GetMapping("/get-users-by-sex")
    public List getUsersBySex(@RequestParam(name = "sex") String sex) {
        return userService.getUsersBySex(sex);
    }
}

接下来,不用我说大家也知道了吧!接口访问,一切从简,那就直接打开浏览器访问咯

奥对了在访问之前,咱们再做一件事,添加一下控制台sql打印输出,方便我们查看到底执行了什么?对吧。做法只需在application-dev.yaml 中配置如下即可。

# 日志设置
logging:
  level:
    # 持久层日志级别
    com.example.demo.dao: debug

ok~咱们先来访问第一个接口;浏览器直接访问。

http://localhost:8080/user/get-users

ps:如果中途报错,找不到basemapper

那你请在启动类 DemoApplication 中添加如下这行,表示指定扫描 dao。

@MapperScan("com.example.demo.dao")
完事之后,接着干正事,看看能否查询到五条数据?咱们拭目以待~

很好。成功查询出了五条数据

然后我们再看下控制台,看看执行了什么sql语句?请看如下:

第一个查询语句,成功输出,也打印并返回五条数据值。

接下来我们来访问第二个接口,带性格参数。看看能否成功?


http://localhost:8080/user/get-users-by-sex?sex=男

结果如下:

结果上看,明显是进行了条件查询,只查询出了性别为男的数据!证明带参也是没问题。

我们来确认一下,回到idea控制台,请看下边,朋友们,sql语句已经告诉了我们一切,很显然,是把sex = '男' 作为了where 条件 进行了数据过滤!

把参数换成 '女' 试试,能否数据过滤

结果如下:

也是根据性别参数成功过筛数据。

好啦!接下来你们就随便玩随便造啦。想怎么玩就怎么玩,反正就是引领入门,修行靠个人啦~



相关推荐

Linux 系统启动完整流程

一、启动系统流程简介如上图,简述系统启动的大概流程:1:硬件引导UEFi或BIOS初始化,运行POST开机自检2:grub2引导阶段系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器GRU...

超专业解析!10分钟带你搞懂Linux中直接I/O原理

我们先看一张图:这张图大体上描述了Linux系统上,应用程序对磁盘上的文件进行读写时,从上到下经历了哪些事情。这篇文章就以这张图为基础,介绍Linux在I/O上做了哪些事情。文件系统什么是...

linux入门系列12--磁盘管理之分区、格式化与挂载

前面系列文章讲解了VI编辑器、常用命令、防火墙及网络服务管理,本篇将讲解磁盘管理相关知识。本文将会介绍大量的Linux命令,其中有一部分在“linux入门系列5--新手必会的linux命令”一文中已经...

Linux环境下如何设置多个交叉编译工具链?

常见的Linux操作系统都可以通过包管理器安装交叉编译工具链,比如Ubuntu环境下使用如下命令安装gcc交叉编译器:sudoapt-getinstallgcc-arm-linux-gnueab...

可算是有文章,把Linux零拷贝技术讲透彻了

阅读本文大概需要6.0分钟。作者:卡巴拉的树链接:https://dwz.cn/BaQWWtmh本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念...

linux软链接的创建、删除和更新

大家都知道,有的时候,我们为了省下空间,都会使用链接的方式来进行引用操作。同样的,在系统级别也有。在Windows系列中,我们称其为快捷方式,在Linux中我们称其为链接(基本上都差不多了,其中可能...

Linux 中最容易被黑客动手脚的关键目录

在Linux系统中,黑客攻击后常会针对关键目录和文件进行修改以实现持久化、提权或隐藏恶意活动。本文介绍下黑客最常修改的目录及其手法。一、/etc目录关键文件有:/etc/passwd和/et...

linux之间传文件命令之Rsync傻瓜式教程

1.前言linux之间传文件命令用什么命令?本文介绍一种最常用,也是功能强大的文件同步和传输工具Rsync,本文提供详细傻瓜式教程。在本教程中,我们将通过实际使用案例和最常见的rsync选项的详细说...

Linux下删除目录符号链接的方法

技术背景在Linux系统中,符号链接(symlink)是一种特殊的文件,它指向另一个文件或目录。有时候,我们可能需要删除符号链接,但保留其指向的目标目录。然而,在删除符号链接时可能会遇到一些问题,例如...

阿里云国际站注册教程:aa云服务器怎么远程链接?

在全球化的今天,互联网带给我们无以计数的便利,而云服务器则是其中的重要基础设施之一。这篇文章将围绕阿里云国际站注册、aa云服务器如何远程链接,以及服务器安全防护如Ddos防火墙、网站应用防护waf防火...

Linux 5.16 网络子系统大范围升级 多个新适配器驱动加入

Linux在数据中心中占主导地位,因此每个内核升级周期的网络子系统变化仍然相当活跃。Linux5.16也不例外,周一最新与网络相关的更新加入了大量的驱动和新规范的支持。一个较新硬件的驱动是Realt...

搭建局域网文件共享服务(Samba),手机电脑都能看喜欢的影视剧

作为一名影视爱好者,为了方便地观看自己喜欢的影视作品,在家里搞一个专门用来存放电影的服务器是有必要的。蚁哥选则用一台Ubuntu系统的电脑做为服务器,共享影音文件,其他同一个局域网内的电脑或手机可以...

分享一个实用脚本—centos7系统巡检

概述这周闲得慌,就根据需求写了差不多20个脚本(部分是之前分享过的做了一些改进),今天主要分享一个给平时运维人员用的centos7系统巡检的脚本,或者排查问题检查系统情况也可以用..实用脚本#!/bi...

Linux 中创建符号链接的方法

技术背景在Linux系统里,符号链接(SymbolicLink),也被叫做软链接(SoftLink),是一种特殊的文件,它指向另一个文件或者目录。符号链接为文件和目录的管理带来了极大的便利,比...

一文掌握 Linux 符号链接

符号链接(SymbolicLink),通常被称为“软链接”,是Linux文件系统中一种强大而灵活的工具。它允许用户创建指向文件或目录的“快捷方式”,不仅简化了文件管理,还在系统配置、软件开发和日...