探索 MyBatis - Plus:从入门到精通

一、引言

MyBatis - Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上简化了开发流程,提供了更加强大的功能。它可以帮助开发者更高效地进行数据库持久层的开发,减少大量的重复代码。本文将详细介绍 MyBatis - Plus 的创建、使用方法以及相关知识点。

二、MyBatis - Plus 的创建步骤

1. 环境准备

  • 确保你的项目是基于 Java 的,并且已经安装好合适的 JDK。对于项目的构建工具,如果使用 Maven,在 pom.xml 文件中添加以下依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis - plus - boot - starter</artifactId><version>最新版本号</version>
</dependency>

如果是 Gradle 项目,则在 build.gradle 文件中添加相应依赖:

implementation 'com.baomidou:mybatis - plus - boot - starter:最新版本号'

2. 配置数据源

  • 在 Spring Boot 项目中(MyBatis - Plus 常与 Spring Boot 结合使用),在 application.properties 或 application.yml 文件中配置数据源相关信息。以 MySQL 为例,application.yml 配置如下:
spring:datasource:driver - class - name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTCusername: rootpassword: your_password

3. 配置 MyBatis - Plus

  • 在 Spring Boot 项目中,无需额外的 MyBatis - Plus 核心配置文件(当然也可以自定义配置)。如果需要自定义配置,可以创建 MybatisPlusConfig 类。例如:
@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 可以在这里添加拦截器等自定义配置return interceptor;}
}

4. 创建实体类

  • 创建与数据库表对应的实体类。假设我们有一个 User 表,实体类 User 如下:
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {private Long id;private String name;private Integer age;private String email;
}

这里使用了 Lombok 的 @Data 注解来简化 getter、setter 等方法的编写,@TableName 注解指定了实体类对应的表名。

5. 创建 Mapper 接口

  • 创建继承自 BaseMapper 的 Mapper 接口。对于 User 实体类,UserMapper 接口如下:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.springframework.stereotype.Repository;@Repository
public interface UserMapper extends BaseMapper<User> {
}

三、MyBatis - Plus 的使用

1. 基本的 CRUD 操作

  • 插入数据:在服务层,可以通过注入 UserMapper 来插入数据。
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public void insertUser(User user) {userMapper.insert(user);}
}

  • 查询数据
// 根据 ID 查询
User user = userMapper.selectById(1L);// 查询所有
List<User> userList = userMapper.selectList(null);// 条件查询,使用 QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");
List<User> usersByName = userMapper.selectList(queryWrapper);

  • 更新数据
User user = new User();
user.setId(1L);
user.setName("李四");
userMapper.updateById(user);

  • 删除数据
// 根据 ID 删除
userMapper.deleteById(2L);// 根据条件删除
QueryWrapper<User> deleteWrapper = new QueryWrapper<>();
deleteWrapper.lt("age", 18);
userMapper.delete(deleteWrapper);

2. 分页查询

  • 首先配置分页插件,在 MybatisPlusConfig 类中添加:
@Bean
public PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();
}

  • 然后在代码中进行分页查询:
Page<User> page = new Page<>(1, 10);
userMapper.selectPage(page, null);
System.out.println("当前页:" + page.getCurrent());
System.out.println("每页数量:" + page.getSize());
System.out.println("总记录数:" + page.getTotal());
System.out.println("数据列表:" + page.getRecords());

四、MyBatis - Plus 的知识点

1. 条件构造器(Wrapper)

  • 功能强大QueryWrapperUpdateWrapper 等条件构造器可以灵活地构建 SQL 语句中的 WHERE 子句和 SET 子句。除了简单的等于(eq)、大于(gt)、小于(lt)等条件,还有模糊查询(likenotLike)、范围查询(betweennotBetween)、分组(groupBy)、排序(orderByorderByDesc)等丰富的方法。
  • 示例
QueryWrapper<User> complexWrapper = new QueryWrapper<>();
complexWrapper.like("name", "张").gt("age", 20).orderByDesc("age").groupBy("department");
List<User> complexResult = userMapper.selectList(complexWrapper);

2. 自动填充功能

  • 场景与实现:在某些情况下,我们希望在插入或更新数据时自动填充一些字段,比如创建时间、更新时间等。可以通过实现 MetaObjectHandler 接口来实现。
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);}
}

3. 逻辑删除

  • 概念与配置:逻辑删除是指在数据库中不是真正地删除数据,而是通过一个字段(如 deleted)来标记数据是否被删除。在实体类中使用 @TableLogic 注解来配置逻辑删除。
@Data
@TableName("user")
@TableLogic
public class User {private Long id;private String name;private Integer age;private String email;// 数据库中 deleted 字段类型为 Integer(0 表示未删除,1 表示已删除)private Integer deleted; 
}

当执行删除操作时,MyBatis - Plus 会自动将 deleted 字段更新为表示删除的值,查询时也会自动过滤掉已删除的数据。

4. 代码生成器

  • 快速生成代码:MyBatis - Plus 提供了代码生成器,可以根据数据库表结构快速生成实体类、Mapper 接口、Service 层、Controller 层等代码。示例代码如下:
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import java.util.ArrayList;public class CodeGenerator {public static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();// 全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("你的名字");gc.setOpen(false);gc.setFileOverride(false);gc.setServiceName("%sService");gc.setIdType(IdType.AUTO);gc.setDateType(DateType.ONLY_DATE);mpg.setGlobalConfig(gc);// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setDbType(DbType.MYSQL);dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUrl("jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC");dsc.setUsername("root");dsc.setPassword("your_password");mpg.setDataSourceConfig(dsc);// 包配置PackageConfig pc = new PackageConfig();pc.setModuleName("demo");pc.setParent("com.example");mpg.setPackageConfig(pc);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true);strategy.setLogicDeleteFieldName("deleted");// 自动填充配置TableFill createTime = new TableFill("create_time", FieldFill.INSERT);TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);ArrayList<TableFill> tableFills = new ArrayList<>();tableFills.add(createTime);tableFills.add(updateTime);strategy.setTableFillList(tableFills);strategy.setRestControllerStyle(true);strategy.setControllerMappingHyphenStyle(true);strategy.setInclude("user"); // 这里填写要生成代码的表名,可以多个mpg.setStrategyConfig(strategy);// 执行生成mpg.execute();}
}

五、总结

MyBatis - Plus 为数据库持久层开发带来了极大的便利,通过简单的配置和丰富的功能,可以快速实现各种复杂的数据库操作。从基本的 CRUD 到高级的条件查询、分页、自动填充、逻辑删除以及代码生成等功能,让开发者可以更专注于业务逻辑的实现,提高开发效率。希望本文能帮助你更好地理解和使用 MyBatis - Plus。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4490.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java三大特性之一——多态(详细版)

文章目录 一、什么是多态二、重写2.1、重写的规则 三、多态的实现条件四、向上转型五、向下转型六、动态绑定七、使用多态的优缺点7.1、优点7.2、缺点 八、避免在构造方法中调用重写的方法 一、什么是多态 Java多态是面向对象编程的一个重要特性&#xff0c;它允许不同的对象对…

连锁餐饮企业-凡塔斯,用千里聆RPA搭建用户评价管理系统,提升门店服务满意度

凡塔斯是大型连锁餐饮企业昊澜餐饮集团旗下餐饮品牌&#xff0c;是牛排自助餐头部品牌&#xff0c;旗下拥有凡塔斯、百分好、食物链KING自助烤肉及餐饮人才商学院等多个行业知名品牌。 创立至今&#xff0c;集团管理门店已发展到福建、广东、江西、浙江等十多个省市&#xff0c…

设备状态监控一定要直观,可视化大屏最适合这个工作

一、引言 在现代工业生产和各类设施运行中&#xff0c;设备的稳定运行至关重要。为了确保设备能够高效、可靠地工作&#xff0c;及时了解设备的状态是关键。而设备状态监控一定要直观&#xff0c;只有这样才能让操作人员和管理人员迅速掌握设备的运行情况&#xff0c;及时发现…

xxe靶机实战

靶机地址&#xff1a;https://www.vulnhub.com/entry/xxe-lab-1,254/ 下载好后解压 直接拖拽.ovf格式的文件到虚拟机里 打开kali扫描主机,靶机开着或者后台运行就行 arp-scan -I eth0 -l 扫描出来目标靶机ip地址192.168.142.145 nmap扫描端口 nmap -A -sS -T4 -P- --min-rat…

钉钉内集成第三方免密登录(Vue+.Net)

需要实现的效果就是在钉钉内点击应用能跳转到第三方网站并且免密登录 1.登录钉钉PC端管理后台 2.通过管理后台进去开发者后台 3.应用开发 创建H5微应用 4.应用创建成功后直接点权限管理全部授权 5.设置H5登录地址 6. 应用管理发布 至此需要配置的步骤全部已完成&#xff0c;…

画动态爱心(Python-matplotlib)

介绍 氵而已 由于用的是 AI&#xff0c;注释得非常清楚&#xff0c;自己改改也可以用 代码 # -*- coding: utf-8 -*- # Environment PyCharm # File_name 尝试1 |User Pfolg # 2024/11/05 22:45 import numpy as np import matplotlib.pyplot as plt import matplo…

理解 WordPress | 第五篇:页面构建器选择指南

WordPress 专题致力于从 0 到 1 搞懂、用熟这种可视化建站工具。 第一阶段主要是理解。 第二阶段开始实践个人博客、企业官网、独立站的建设。 如果感兴趣&#xff0c;点个关注吧&#xff0c;防止迷路。 什么是 WordPress 构建器 WordPress 构建器&#xff08;Page Builder&am…

硬件基础07 功率放大器

一、功放理论 在多级放大电路中&#xff0c;输出信号往往要送去驱动—定的装置。例如&#xff0c;这类装置包括收音机中扬声器的音圈、电动机的控制绕组等。多级放大电路除了应有电压放大级外&#xff0c;还要求有一个能输出一定信号功率的输出级。这类主要用于向负载提供功率的…

敬业签适配鸿蒙:开启多端协同新篇章

纯血鸿蒙&#xff0c;即华为推出的原生鸿蒙操作系统&#xff08;HarmonyOS Next&#xff09;&#xff0c;是一款面向全场景的分布式操作系统&#xff0c;它以其独特的微内核设计和多设备协同能力&#xff0c;引领着智能终端的新潮流。鸿蒙系统的推出&#xff0c;不仅标志着中国…

Matlab车牌识别课程设计报告模板(附源代码)

目 录 一&#xff0e;课程设计目的……………………………………………3 二&#xff0e;设计原理…………………………………………………3 三&#xff0e;详细设计步骤……………………………………………3 四. 设计结果及分析…………………………………………18 五. …

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 上传一个1.php&#xff0c;被拦截 在1.p…

用qrcode和pyzbar分别生成和解码二维码

我用的是anaconda环境&#xff0c;在anaconda命令行下&#xff0c;用pip分别安装以下库文件&#xff1a; pip install opencv-python pip install numpy pip install pillow pip install myqr pip install qrcode pip install zxing 生成二维码 打开pycharm&#xff0c…

软件测试学习笔记丨Vue学习笔记-基本介绍

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/23458 编译器使用&#xff1a;VScode 推荐插件 JavaScript (ES6) code snippets&#xff1a;包含 ES6 语法中的 JS 代码段Vetur&#xff1a;VSCode 支持 VUE 的工具Auto Close Tag&#xff…

【简历】25届江西某一本大学JAVA简历:不能把大厂的技能写到中厂上

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 校招的第一法则就是必须要确定校招层次。 开发岗分为大中小厂&#xff0c;不同的层次对学校背景、时间点、项目和考点的要求都不太一样&#xff0c…

微信订阅消息

一、订阅消息模板 进入微信小程序平台&#xff0c;开通订阅消息后进行模板申请 1.申请后得到模板id 2.直接在数据库中插入模板 二、创建订阅消息模板参数类 1.进入相关目录&#xff0c;创建订阅消息发送参数模板类&#xff0c;类属性根据模板的详细类容进行设置 2.在相应…

Vue3 + Element Plus简单使用案例及【eslint】报错处理

本电脑Vue环境已安装正常使用 博主使用npm 包管理器安装 Element Plus.有问题评论区帮忙指正,感谢阅读. 在完成的过程中如果遇到eslint报错 Parsing error &#xff1a;Unexpected token { eslint 这个报错&#xff0c;也可以尝试第7部分报错处理解决。 目录 1.新建项目 2…

MySQL索引、B+树相关知识总结

MySQL索引、B树相关知识汇总 一、有一个查询需求&#xff0c;MySQL中有两个表&#xff0c;一个表1000W数据&#xff0c;另一个表只有几千数据&#xff0c;要做一个关联查询&#xff0c;如何优化&#xff1f;1、为关联字段建立索引2、小表驱动大表 二、b树和b树的区别1、更高的查…

AI绘画凉了吗?都快2025年了你还没搭上AI这一便车吗?

在科技飞速发展的今天&#xff0c;AI 绘画如同一场绚丽的艺术风暴&#xff0c;席卷了整个创意领域。它以其独特的魅力和强大的功能&#xff0c;为艺术家、设计师以及普通爱好者们带来了前所未有的创作体验。 在数字化时代的浪潮下&#xff0c;人工智能(AI)技术正以前所未有的速…

常见 CSS 选择器用法

"Be Your Own Hero" CSS选择器是一种模式&#xff0c;用于选择需要应用CSS样式的HTML元素。以下是一些基本的CSS选择器类型&#xff1a; 1.标签选择器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

AIDD - 分子药物发现的计算方法现状总结

分子药物发现的计算方法现状总结 01 引言 药物发现的流程近年来因计算技术的飞速进步而发生了深刻变革。**计算辅助药物设计&#xff08;CADD, Computer-Aided Drug Design&#xff09;和人工智能驱动药物发现&#xff08;AIDD, Artificial Intelligence-Driven Drug Discover…