21天掌握javaweb--->第4天:MyBatis-Plus基础与进阶

21天掌握JavaWeb--->第4天:MyBatis-Plus基础与进阶

MyBatis-Plus简介

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

  1. 无侵入性:MyBatis-Plus在MyBatis的基础上进行扩展,不改变MyBatis的任何内容,引入MyBatis-Plus不会对现有MyBatis工程产生影响。
  2. 损耗小:启动即会自动注入基本CRUD,性能基本无损耗,直接面向对象操作。
  3. 强大的CRUD操作:内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作。
  4. 支持Lambda形式调用:通过Lambda表达式,方便的编写各类查询条件,无需再担心字段写错。
  5. 支持主键自动生成:支持多达4种主键策略,可自由配置,完美解决主键问题。
  6. 支持ActiveRecord模式:实体类只需继承Model类即可进行强大的CRUD操作。
  7. 内置代码生成器:采用代码或Maven插件可快速生成Mapper、Model、Service、Controller层代码。
  8. 内置分页插件:基于MyBatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询。

快速上手CRUD操作

1. 配置MyBatis-Plus

首先,创建一个Spring Boot项目,并添加MyBatis-Plus依赖:

<!-- Maven依赖 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.9</version>
</dependency>

配置数据源和MyBatis-Plus:

# application.yml
spring:datasource:driver-class-name: org.h2.Driverusername: rootpassword: testsql:init:schema-locations: classpath:db/schema-h2.sqldata-locations: classpath:db/data-h2.sql

在Spring Boot启动类中添加@MapperScan注解,扫描Mapper文件夹:

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2. 编写实体类和Mapper接口

编写实体类User.java

@Data
@TableName("user")
public class User {private Long id;private String name;private Integer age;private String email;
}

编写Mapper接口UserMapper.java

public interface UserMapper extends BaseMapper<User> {
}

3. CRUD操作示例

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getAllUsers() {return userMapper.selectList(null);}public void insertUser(User user) {userMapper.insert(user);}public void updateUser(User user) {userMapper.updateById(user);}public void deleteUser(Long id) {userMapper.deleteById(id);}
}

MyBatis-Plus进阶功能

1. 代码生成器

MyBatis-Plus的代码生成器AutoGenerator可以快速生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,提升开发效率。

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("jobob");gc.setOpen(false);mpg.setGlobalConfig(gc);// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");dsc.setDriverName("com.mysql.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("密码");mpg.setDataSource(dsc);// 包配置PackageConfig pc = new PackageConfig();pc.setModuleName(scanner("模块名"));pc.setParent("com.baomidou.ant");mpg.setPackageInfo(pc);// 自定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};// 自定义输出配置List<FileOutConfig> focList = new ArrayList<>();focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {@Overridepublic String outputFile(TableInfo tableInfo) {return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);// 配置模板TemplateConfig templateConfig = new TemplateConfig();templateConfig.setEntity("templates/entity2.java");mpg.setTemplate(templateConfig);// 执行生成mpg.execute();}
}

2. 分页插件

MyBatis-Plus内置分页插件,简化分页操作。使用时,只需在查询前加入分页参数:

public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;public IPage<User> findUserByPage(int pageNumber, int pageSize) {Page<User> page = new Page<>(pageNumber, pageSize);return userMapper.selectPage(page, null);}
}

总结

通过本教程,我们快速上手了MyBatis-Plus的基本CRUD操作,并探索了其进阶功能,包括代码生成器和分页插件。MyBatis-Plus作为一个强大的MyBatis增强工具,通过提供代码生成器、简化CRUD操作、内置分页插件等功能,极大地提升了开发效率和代码质量。希望这能帮助你更好地理解和应用MyBatis-Plus,提高JavaWeb开发的技能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FREERTOS二值信号量实验

代码&#xff1a; 主程序 #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" #include "./SYSTEM/delay/delay.h" #include "./BSP/LED/led.h" #include "./BSP/LCD/lcd.h" #include "./BSP/KEY/key…

vue3中 axios 发送请求 刷新token 封装axios

service.js 页面 import axios from axios // 创建axios实例 const instance axios.create({baseURL: http://gcm-test.jhzhkj.cn:8600/h5card/,timeout: 5000, // 请求超时时间headers: {get: {Content-Type: application/x-www-form-urlencoded},post: {Content-Type: appl…

对于Oracle来说,土地管理是非核心域吗

思雨喵 2022-1-4 14:13 您在课上说&#xff0c;对于土地管理系统来说oracle&#xff0c;arcgis&#xff0c;java是非核心域&#xff0c;因为它们可有可无。我想请教对于oracle来说&#xff0c;土地管理好像也是可有可无&#xff0c;那么土地管理是非核心域吗 UMLChina潘加宇 …

一次Kafka启动失败引出的问题

背景 Some time&#xff0c;有个现场童鞋说咱的Kafka实例有个broker一直crash&#xff0c;还截图给我看了&#xff0c;大致是Kafka启动加载topic分区日志文件的时候&#xff0c;然后就没了&#xff0c;连个WARN都没有。当然&#xff0c;光看这个截图咱啥都不知道&#xff0c;因…

工业齐套管理虚拟现实仿真模拟软件

工业齐套管理虚拟现实仿真模拟软件是与法国最大的汽车制造商合作开发的一款虚拟现实仿真模拟软件&#xff0c;借助身临其境的虚拟现实环境&#xff0c;无需停止生产线&#xff0c;即可模拟仓库和提货区域。 工业齐套管理虚拟现实仿真模拟软件不仅适用于汽车工业&#xff0c;安全…

状态模式的理解和实践

在软件开发中&#xff0c;我们经常遇到需要根据对象的不同状态执行不同行为的情况。如果直接将这些状态判断和行为逻辑写在同一个类中&#xff0c;会导致该类变得臃肿且难以维护。为了解决这个问题&#xff0c;状态模式&#xff08;State Pattern&#xff09;应运而生。状态模式…

【MySQL — 数据库基础】MySQL的安装与配置 & 数据库简单介绍

数据库基础 本节目标 掌握关系型数据库&#xff0c;数据库的作用掌握在Windows和Linux系统下安装MySQL数据库了解客户端工具的基本使用和SQL分类了解MySQL架构和存储引擎 1. 数据库的安装与配置 1.1 确认MYSQL版本 处理无法在 cmd 中使用 mysql 命令的情况&a…

图学习GNN笔记

目录 第一部分&#xff1a;预测分析中的图学习4.3 案例研究&#xff1a;图上的学习机器学习生命周期 第二部分&#xff1a;图特征学习特征表示与嵌入为什么难以学习&#xff1f; 第三部分&#xff1a;节点嵌入嵌入节点设置学习节点嵌入浅层编码如何定义节点相似性&#xff1f; …

Python从入门到入狱

Python是从入门到入狱&#xff1f;这个充满调侃意味的说法在程序员圈子里流传甚广。表面看&#xff0c;它似乎是在嘲笑这门语言从简单易学到深陷麻烦的巨大反差&#xff0c;实际上却隐藏着很多值得深思的问题。要解读这个话题&#xff0c;得从Python的特点、使用场景以及潜在风…

Linux获取文件属性

目录 stat函数 获取文件属性 获取文件权限 实现“head -n 文件名”命令的功能 编程实现“ls -l 文件名”功能 stat/fstat/lstat的区别&#xff1f; stat函数 int stat(const char *path, struct stat *buf); 功能&#xff1a;获取文件属性 参数&#xff1a; path&…

线程信号量 Linux环境 C语言实现

既可以解决多个同类共享资源的互斥问题&#xff0c;也可以解决简易的同步问题 头文件&#xff1a;#include <semaphore.h> 类型&#xff1a;sem_t 初始化&#xff1a;int sem_init(sem_t *sem, int pshared, unsigned int value); //程序中第一次对指定信号量调用p、v操…

如何使用k8s安装minio呢

话不多说&#xff0c;直接干货。 创建 minio-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: miniolabels:app: minio spec:replicas: 1selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:containers:- name: minioimage: reg…

设计模式:17、单件模式(单例模式)

目录 0、定义 1、单件模式的一个角色 2、单件模式的UML类图 3、示例代码 0、定义 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 1、单件模式的一个角色 单件类&#xff08;Singleton&#xff09;:单件类只可以创建出一个实例。 2、单件模式的UML类…

前端常用缓存技术深度剖析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

任务管理法宝:甘特图详解

在项目管理中&#xff0c;如何清晰、直观地展示项目的进度和任务分配&#xff1f; 甘特图作为一种经典的项目管理工具&#xff0c;提供了有效的解决方案。无论是团队合作还是个人项目管理&#xff0c;甘特图都能帮助你轻松追踪各项任务的进展。今天&#xff0c;我们将详细介绍…

leetcode 62.不同路径

1.题目要求: 2.解题思路: 利用动态规划去解此题 3.题目代码: class Solution { public:int uniquePaths(int m, int n) {//创建dp数组vector<vector<int>> dp;dp.resize(m);for(int i 0;i < dp.size();i){dp[i].resize(n);}//确定dp数组的含义//初始化for(i…

电子应用设计方案-38:智能语音系统方案设计

智能语音系统方案设计 一、引言 智能语音系统作为一种便捷、自然的人机交互方式&#xff0c;正逐渐在各个领域得到广泛应用。本方案旨在设计一个高效、准确、功能丰富的智能语音系统。 二、系统概述 1. 系统目标 - 实现高准确率的语音识别和自然流畅的语音合成。 - 支持多种语…

UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets

插件名称&#xff1a;UPIrregularWidgets 插件包含以下功能 你可以点击任何图片&#xff0c;而不仅限于矩形图片。 UPButton、UPCheckbox 基于原始的 Button、Checkbox 扩展。 复选框增加了不规则图像识别功能&#xff0c;复选框增加了悬停事件。 欢迎来到我的博客 记录学习过…

计算机中各部件的选购

目录 1.主板的选购 2.CPU的选购 3.CPU散热器的选购 4.内存的选购 5.硬盘的选购 6.光驱的选购 7.光盘的选购 8.键盘的选购 9.鼠标的选购 10.扫描仪的选购 11.摄像头的选购 12.显卡的选购 13.显示器的选购 14.打印机的选购 15.声卡的选购 16.网卡的选购 17.交换…

第32天:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

时间轴&#xff1a; 32天主要学习内容&#xff1a; 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis java技术使用历史&#xff08;2023 &#xff09;&#xff1a; JavaEE-HTTP-Servlet&路由&周期: java学习范围&#xff1a; 3、Java: 功能:数据…