• springboot系列(七):如何通过mybatis-plus实现接口增删改查|超级详细,建议收藏


    👨‍🎓作者:bug菌

    ✏️博客:CSDN掘金

    💌公众号:猿圈奇妙屋

    🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

    🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

             嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

           小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮👍吧,您的点赞三连( 收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

    一、前言🔥

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

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

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

    二、mybatis-plus概览🔥

    0️⃣概要

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

    愿景:

    我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

    1️⃣特性

    • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
    • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

    2️⃣支持数据库

            任何能使用 mybatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。

    • mysql,oracle,db2,h2,hsql,sqlite,postgresql,sqlserver,Phoenix,Gauss ,clickhouse,Sybase,OceanBase,Firebird,cubrid,goldilocks,csiidb

    • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库

    3️⃣框架结构

     4️⃣代码托管

    github |  Gitee

    ps:以上来自 mybatis-plus官网介绍

    三、增删改查实战演练🔥

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

    1. com.baomidou
    2. mybatis-plus-boot-starter
    3. 3.2.0
    4. com.baomidou
    5. mybatis-plus-generator
    6. 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方法即可。
    1. package com.example.demo.Entity;
    2. import com.baomidou.mybatisplus.annotation.IdType;
    3. import com.baomidou.mybatisplus.annotation.TableField;
    4. import com.baomidou.mybatisplus.annotation.TableId;
    5. import com.baomidou.mybatisplus.annotation.TableName;
    6. /**
    7. * 用户基本信息实体
    8. */
    9. @TableName("user")
    10. public class UserEntity {
    11. @TableId(value = "id", type = IdType.AUTO) //表示该id为自增,新增时候不需要手动设置id。
    12. private Integer id;
    13. @TableField(value = "name")
    14. private String name;
    15. @TableField(value = "age")
    16. private Integer age;
    17. @TableField(value = "sex")
    18. private String sex;
    19. @TableField(value = "address")
    20. private String address;
    21. public Integer getId() {
    22. return id;
    23. }
    24. public void setId(Integer id) {
    25. this.id = id;
    26. }
    27. public String getName() {
    28. return name;
    29. }
    30. public void setName(String name) {
    31. this.name = name;
    32. }
    33. public Integer getAge() {
    34. return age;
    35. }
    36. public void setAge(Integer age) {
    37. this.age = age;
    38. }
    39. public String getSex() {
    40. return sex;
    41. }
    42. public void setSex(String sex) {
    43. this.sex = sex;
    44. }
    45. public String getAddress() {
    46. return address;
    47. }
    48. public void setAddress(String address) {
    49. this.address = address;
    50. }
    51. }

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

     UserService

    编写两个接口!分别为不带参数与带一个参数,作为演示:具体代码如下
    1. package com.example.demo.service;
    2. import com.baomidou.mybatisplus.extension.service.IService;
    3. import com.example.demo.Entity.UserEntity;
    4. import java.util.List;
    5. /**
    6. * 用户管理业务层接口
    7. */
    8. public interface UserService extends IService {
    9. /**
    10. * 不分页查询所有用户信息
    11. */
    12. List getUsers();
    13. /**
    14. * 根据性别查询所有用户
    15. *
    16. * @param sex 性别
    17. */
    18. List getUsersBySex(String sex);
    19. }

    UserServiceImpl

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

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

    1. package com.example.demo.service.impl;
    2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    4. import com.example.demo.Entity.UserEntity;
    5. import com.example.demo.dao.UserMapper;
    6. import com.example.demo.service.UserService;
    7. import org.springframework.stereotype.Service;
    8. import java.util.List;
    9. /**
    10. * 用户管理业务层
    11. */
    12. @Service
    13. public class UserServiceImpl extends ServiceImpl implements UserService {
    14. /**
    15. * 不分页查询所有用户信息
    16. */
    17. @Override
    18. public List getUsers() {
    19. //直接可使用IService 封装好的一些方法,这个自行点进去看。
    20. return this.list();
    21. }
    22. /**
    23. * 根据性别查询所有用户
    24. *
    25. * @param sex 性别
    26. */
    27. @Override
    28. public List getUsersBySex(String sex) {
    29. //条件构造器
    30. QueryWrapper wrapper = new QueryWrapper<>();
    31. //eq 代表“ = ”;例如 eq("sex", "男") ---> sex = '男';等同于拼接在sql语句后边的where条件。
    32. wrapper.eq("sex",sex);
    33. //将条件带入返回
    34. List list = this.list(wrapper);
    35. //返回数据
    36. return list;
    37. }
    38. }

    UserMapper 

    1. package com.example.demo.dao;
    2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    3. import com.example.demo.Entity.UserEntity;
    4. import org.springframework.stereotype.Component;
    5. /**
    6. * 用户管理持久层
    7. */
    8. @Component
    9. public interface UserMapper extends BaseMapper {
    10. }

    以上 添加就大功告成了;最后是controller类,调用刚才我们写的那两接口进行访问,看看结果如何?分发器代码如下:

    1. package com.example.demo.controller;
    2. import com.example.demo.Entity.UserEntity;
    3. import com.example.demo.service.UserService;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.web.bind.annotation.GetMapping;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.RequestParam;
    8. import org.springframework.web.bind.annotation.RestController;
    9. import java.util.List;
    10. /**
    11. * 用户管理分发器
    12. */
    13. @RestController@RequestMapping("/user")
    14. public class UserController {
    15. @Autowired
    16. private UserService userService;
    17. /**
    18. * 不分页查询所有用户信息
    19. */
    20. @GetMapping("/get-users")
    21. public List getUserList() {
    22. return userService.getUsers();
    23. }
    24. /**
    25. * 根据性别查询所有用户
    26. *
    27. * @param sex 性别
    28. */
    29. @GetMapping("/get-users-by-sex")
    30. public List getUsersBySex(@RequestParam(name = "sex") String sex) {
    31. return userService.getUsersBySex(sex);
    32. }
    33. }

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

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

    1. # 日志设置
    2. logging:
    3. level:
    4. # 持久层日志级别
    5. 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 条件 进行了数据过滤!

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

     结果如下: 

            也是根据性别参数成功过筛数据。好啦!接下来你们就随便玩随便造啦。想怎么玩就怎么玩,反正就是引领入门,修行靠个人啦。

    ... ...

           ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

    四、往期推荐🔥

    五、文末🔥

            如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

           我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

            最后送大家两句我很喜欢的话,与诸君共勉!


    ☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

    🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


    ​​​

    💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

    💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

    💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

    💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

    💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

  • 相关阅读:
    锐龙r7 6800u和i5 12500h选哪个好 r76800u和i512500h对比
    从企业的视角来看,数据中台到底意味着什么?
    C++中虚继承时的构造函数
    MYSQL sql的技巧与避坑
    2024蓝桥杯每日一题(最短路径)
    深度学习七 —— BN & LN & IN & GN
    在 Buildroot 文件系统中,/etc/profile.d/ 和 /etc/init.d/ 目录下的脚本执行顺序
    Linux 6.0 正式发布,新特征一览!
    LabVIEW中将枚举与条件结构一起使用
    yolov5的TensorRT部署--动态batch
  • 原文地址:https://blog.csdn.net/weixin_43970743/article/details/125845236