当前位置: 首页 > article >正文

MyBatisPlus(1):快速入门

我们知道,MyBatis是一个优秀的操作数据库的持久层框架(优秀持久层框架——MyBatis),其基于底层的JDBC进行高度封装,极大的简化了开发。但是对于单表操作而言,我们需要重复地编写简单的CRUD语句。这其实是不必要的,为此,MyBatisPlus框架在MyBatis框架的基础上进一步封装,提供了大量操作单表CRUD的方法,进一步的提高了我们的开发效率。

MyBatisPlus框架简介

MyBatisPlus和MyBatis的关系

顾名思义,MyBatisPlusMyBatis的后面添加了plus,从词义上来看应该是MyBatis的升级版;事实也如此,MyBatisPlus框架完全支持MyBatis框架的用法(我们在引入了MyBatisPlus框架的依赖之后就不需要再引入MyBatis框架的依赖了)。那是不是意味着MyBatisPlus将要取代MyBatis了?完全不是这样:在MyBatisPlus的官网上,开发者是用这样的图来描述二者的关系的:

TO BE THE BEST PARTNER OF MYBATIS(成为MyBatis最好的伙伴),这是开发者的原话。MyBatisMyBatisPlus二者就好像魂斗罗的两兄弟一样,共同为简化我们的开发而努力。MyBatisPlus框架绝对不是为了取代MyBatis框架出现的,并且MyBatisPlus框架目前也没有能力完全取代MyBatis框架。

MyBatisPlus框架的特点

润物无声

MyBatisPlus框架只做增强而不做改变,因为引入它不会对现有的工程产生影响,如丝般顺滑。

效率至上

MyBatisPlus框架只需要简单配置,即可快速的进行单表CRUD操作,从而节省大量的时间。

丰富功能

代码生成、自动分页、逻辑删除、自动填充、拦截器等功能一应俱全。

广泛认可

连续5年获得开源中国年度最佳开源项目殊荣,Github累计16KStar

这么介绍MyBatisPlus框架也许不够直观,那让我们使用一个快速入门的DEMO来直观展示MyBatisPlus框架是如何简化我们的开发的。

MyBatisPlus框架入门案例

在项目中使用MyBatisPlus框架一共可分为3步。

引入依赖

想要使用一个框架,我们肯定需要引入对应的依赖,以下是MyBatisPlus框架的最新依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.12</version>
</dependency>

因为上文提到了MyBatisPlus框架完全支持MyBatis框架的用法,所以说我们在引入了MyBatisPlus框架依赖之后,如果想要使用MyBatis框架,无需额外的引入,即可使用。

自定义Mapper继承BaseMapper接口

MyBatisPlus框架提供了很多的方法来简化我们的单表CRUD操作这些方法被封装在了一个名为BaseMapper<>的接口中,想要使用这些方法,我们就需要创建一个接口来继承这个接口,注意,在继承时,需要指明BaseMapper<>中的泛型:

EMP实体类:

package com.wzb.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Integer gender;private String phone;private String image;private Integer job;private LocalDate entryDate;private Integer deptId;private LocalDateTime createTime;private LocalDateTime updateTime;
}

自定义Mapper继承BaseMapper接口:

package com.wzb.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzb.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface EmpMapper extends BaseMapper<Emp> {
}

需要注意,在使用自定义Mapper继承BaseMapper接口的时候,需要指明BaseMapper的泛型。

使用对应方法

此时我们就可以使用BaseMapper中封装好的方法来简化单表查询了:

package com.wzb;import com.wzb.mapper.EmpMapper;
import com.wzb.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDate;
import java.time.LocalDateTime;@SpringBootTest
class JavaWeb13MyBatisPlusApplicationTests {@Autowiredprivate EmpMapper empMapper;/*** 查询测试*/@Testpublic void queryTest() {Emp emp = empMapper.selectById(1);System.out.println(emp);}/*** 增加测试*/@Testpublic void insertTest() {Emp emp = new Emp();emp.setId(100);emp.setUsername("测试员工");emp.setPassword("123456");emp.setName("测试员工");emp.setGender(0);emp.setPhone("1310000001");emp.setImage("https://123.com");emp.setJob(1);emp.setEntryDate(LocalDate.now());emp.setDeptId(1);emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empMapper.insert(emp);}/*** 删除测试*/@Testpublic void deleteTest() {empMapper.deleteById("100");}/*** 修改测试*/@Testpublic void updateTest() {Emp emp = new Emp();emp.setId(1);emp.setUsername("张三");empMapper.updateById(emp);}}

这是一个简单的CRUD示例,包含了对于EmpCRUD,但是我们的EmpMapper中是没有任何代码的,仅仅只是继承了BaseMapper的接口,这几个方法分别使用了BaseMapper接口中的selectByIdinsertdeleteByIdupdateById方法,这些方法都是十分简单的CRUD方法,编码及其规范,都可以见名知意,看到方法名就知道是干什么的,需要给方法传递什么参数。

总结

MyBatisPlus框架在MyBatis框架的基础上进一步封装,提供了大量操作单表CRUD的方法,进一步的提高了我们的开发效率。MyBatisPlus框架的快速入门极其简单,但是MyBatis主要聚焦于单表查询的简化,对于简单的CRUD的SQL语句,开发者无需手写,直接使用封装方法即可,但是对于复杂的多表联查的SQL语句,还是需要开发者自己编写SQL语句完成。所以说MyBatisPlus框架和MyBatis框架都是需要我们掌握的,MyBatisPlus框架并不能直接代替MyBatis框架。

在这个快速入门的Demo中,我们使用了BaseMapper中封装的方法来简化查询,那MyBatisPlus框架是如何知道这些方法需要操作数据库中的哪一张表呢?且听下文分解。

http://www.lryc.cn/news/2397762.html

相关文章:

  • 京东热点缓存探测系统JDhotkey架构剖析
  • 多国金融市场数据对接指南(印度、印尼、韩国)
  • 【Elasticsearch】ILM(Index Lifecycle Management)策略详解
  • linux 后记
  • 【笔记】在 MSYS2 MINGW64 环境中安装构建工具链(CMake、GCC、Make)
  • PyTorch -TensorBoard的使用 (一)
  • Redis最佳实践——性能优化技巧之数据结构选择
  • 网络安全方向在校生有哪些证书适合考取?
  • 从0开始学习R语言--Day14--贝叶斯统计与结构方程模型
  • 02-BTC-密码学原理 对hash算法如果出现漏洞的思考
  • [Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译
  • 分布式微服务系统架构第142集:全栈开发
  • PTA-根据已有类Worker,使用LinkedList编写一个WorkerList类,实现计算所有工人总工资的功能。
  • 文档整合自动化
  • 微软markitdown PDF/WORD/HTML文档转Markdown格式软件整合包下载
  • 科普:Linux `su` 切换用户后出现 `$` 提示符,如何排查和解决?
  • BayesFlow:基于神经网络的摊销贝叶斯推断框架
  • NodeJS全栈开发面试题讲解——P9性能优化(Node.js 高级)
  • NVMe IP现状扫盲
  • 5G-A时代与p2p
  • 基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试
  • 基于生产-消费模式,使用Channel进行文件传输(Tcp方式)
  • tortoisegit 使用rebase修改历史提交
  • Python----目标检测(《用于精确目标检测和语义分割的丰富特征层次结构》和R-CNN)
  • Ansible 进阶 - Roles 与 Inventory 的高效组织
  • 极简以太彩光网络解决方案4.0正式发布,“彩光”重构园区网络极简之道
  • 国芯思辰| 霍尔电流传感器AH811为蓄电池负载检测系统安全护航
  • TortoiseSVN账号切换
  • 2025年05月28日Github流行趋势
  • 精益数据分析(91/126):商业模式与阶段匹配的指标体系构建