mybatis-plus保姆级入门教程,手把手教你轻松实现增删改查
mhr18 2024-10-11 13:01 19 浏览 0 评论
一、前言
通过前几期的基础教学,想必大家都已经掌握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依赖;添加如下:
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!--代码自动生成器配置-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
复制代码
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<UserEntity> {
/**
* 不分页查询所有用户信息
*/
List<UserEntity> getUsers();
/**
* 根据性别查询所有用户
*
* @param sex 性别
*/
List<UserEntity> 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<UserMapper, UserEntity> implements UserService {
/**
* 不分页查询所有用户信息
*/
@Override
public List<UserEntity> getUsers() {
//直接可使用IService 封装好的一些方法,这个自行点进去看。
return this.list();
}
/**
* 根据性别查询所有用户
*
* @param sex 性别
*/
@Override
public List<UserEntity> getUsersBySex(String sex) {
//条件构造器
QueryWrapper<UserEntity> wrapper = new QueryWrapper<>();
//eq 代表“ = ”;例如 eq("sex", "男") ---> sex = '男';等同于拼接在sql语句后边的where条件。
wrapper.eq("sex",sex);
//将条件带入返回
List<UserEntity> 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<UserEntity> {
}
以上 添加就大功告成了;
最后是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<UserEntity> getUserList() {
return userService.getUsers();
}
/**
* 根据性别查询所有用户
*
* @param sex 性别
*/
@GetMapping("/get-users-by-sex")
public List<UserEntity> 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 条件 进行了数据过滤!
把参数换成 '女' 试试,能否数据过滤
结果如下:
也是根据性别参数成功过筛数据。
好啦!接下来你们就随便玩随便造啦。想怎么玩就怎么玩,反正就是引领入门,修行靠个人啦~
相关推荐
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
- 备份软件调用rman接口备份报错RMAN-06820 ORA-17629 ORA-17627
-
一、报错描述:备份归档报错无法连接主库进行归档,监听问题12541RMAN-06820:WARNING:failedtoarchivecurrentlogatprimarydatab...
- 增量备份修复物理备库gap(增量备份恢复数据库步骤)
-
适用场景:主备不同步,主库归档日志已删除且无备份.解决方案:主库增量备份修复dg备库中的gap.具体步骤:1、停止同步>alterdatabaserecovermanagedstand...
- 一分钟看懂,如何白嫖sql工具(白嫖数据库)
-
如何白嫖sql工具?1分钟看懂。今天分享一个免费的sql工具,毕竟现在比较火的NavicatDbeaverDatagrip都需要付费才能使用完整功能。幸亏今天有了这款SQLynx,它不仅支持国内外...
- 「开源资讯」数据管理与可视化分析平台,DataGear 1.6.1 发布
-
前言数据齿轮(DataGear)是一款数据库管理系统,使用Java语言开发,采用浏览器/服务器架构,以数据管理为核心功能,支持多种数据库。它的数据模型并不是原始的数据库表,而是融合了数据库表及表间关系...
- 您还在手工打造增删改查代码么,该神器带你脱离苦海
-
作为Java开发程序,日常开发中,都会使用Spring框架,完成日常的功能开发;在相关业务系统中,难免存在各种增删改查的接口需求开发。通常来说,实现增删改查有如下几个方式:纯手工打造,编写各种Cont...
- Linux基础知识(linux基础知识点及答案)
-
系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...
- PL/SQL 杂谈(二)(pl/sql developer使用)
-
承接(一)部分。我们从结构和功能这两个方面展示PL/SQL的关键要素。可以看看PL/SQL的优雅的代码。写出一个好的代码,就和文科生写出一篇优秀的作文一样,那么赏心悦目。1、与SQL的集成PL/S...
- 电商ERP系统哪个好用?(电商erp哪个好一点)
-
电商ERP系统哪个好用?做电商的,谁还没被ERP折腾过?有老板说:“我们早就上了ERP,订单、库存、财务全搞定,系统用得飞起。”也有运营吐槽:“系统是上了,可库存老不准,订单漏单错单天天有,财务对账还...
- 汽车检测线系统实例,看集中控制与PLC分布控制
-
PLC可编程控制器,上个世纪70年代初,为取代早期继电器控制线路,开始采取存储指令方式,完成顺序控制而设计的。开始仅有逻辑运算、计时、计数等简单功能。随着微处理的发展,PLC可编程能力日益提高,已经能...
- 苹果五件套成公司年会奖品主角,几大小技巧教你玩转苹果新品
-
钱江晚报·小时新闻记者张云山随着春节的临近,各家大公司的年会又将陆续上演。上周,各大游戏公司的年会大奖,苹果五件套又成了标配。在上海的游戏公司中,莉莉丝奖品列表拉得相当长,从特等奖到九等奖还包含了特...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)