MyBatis-Plus 入门指南:安装与配置、代码生成、综合案例、主键生成策略、自动填充

目录

1.MyBatis-Plus介绍

1.1.简介

1.2.特性

1.3.结构

1.4.支持数据库

2.快速开始

3.安装与配置

4.代码生成

5.综合案例

5.1.主键生成策略

5.2.自动填充


1.MyBatis-Plus介绍

1.1.简介

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了一些常用功能的增强,使得开发者可以更加便捷地进行数据库访问操作。

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

1.2.特性

  • CRUD操作的增强Mybatis-Plus通过提供通用的Mapper接口和封装的CRUD方法,简化了数据库的增删改查操作。开发者可以通过继承通用Mapper接口,无需编写SQL语句,就能完成基本的CRUD操作。

  • 条件构造器Mybatis-Plus提供了强大的条件构造器,使得构建复杂的查询条件变得更加灵活和易于维护。条件构造器支持链式调用,可以根据需求动态添加查询条件,包括等值条件、范围条件、模糊查询等。

  • 自动分页Mybatis-Plus可以自动处理分页查询,开发者只需要在查询方法中添加分页参数,即可实现数据的分页查询。它支持多种数据库的分页方式,如MySQL的LIMIT语句、Oracle的ROWNUM等。

  • 代码生成器Mybatis-Plus提供了一个代码生成器,可以根据数据库表结构自动生成实体类、Mapper接口、XML映射文件等基本代码。开发者可以通过简单的配置,快速生成大量的基础代码,减少了手写重复代码的工作量。

  • 全局通用操作Mybatis-Plus还提供了一些全局通用操作的增强,如逻辑删除、字段自动填充、乐观锁等。这些功能可以通过注解或配置进行开启,并且可以自定义实现,以满足不同业务场景的需求。

总的来说,Mybatis-Plus简化了Mybatis的开发流程,提高了开发效率。它提供了一些常用功能的增强,使得开发者无需编写繁琐的SQL语句,即可完成常见的数据库操作。同时,它也提供了一些附加功能,如条件构造器、自动分页、代码生成器等,进一步提升了开发效率和代码质量。

1.3.结构

  1. 核心模块(Core Module):核心模块包含了Mybatis-Plus的核心功能和基本组件。它提供了通用的Mapper接口、通用的CRUD方法的实现、条件构造器、分页插件等核心功能的实现。核心模块是整个框架的基础,其他模块都依赖于它。

  2. 代码生成器(Code Generator):代码生成器是一个可选的辅助工具,用于根据数据库表结构自动生成实体类、Mapper接口、XML映射文件等基础代码。通过代码生成器,开发者可以快速生成基础代码,减少手写重复代码的工作量。

  3. 扩展模块(Extension Module):扩展模块是Mybatis-Plus提供的一些扩展功能和增强组件的集合。它包括了一些常用的增强功能,如逻辑删除、字段自动填充、乐观锁等。开发者可以通过引入扩展模块,轻松地增加这些功能的支持。

  4. 注解(annotation):用于对实体类、Mapper接口以及SQL语句进行配置和标记。通过使用注解,可以简化配置文件的编写,提高代码的可读性和可维护性。

1.4.支持数据库

  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb,informix,TDengine,redshift

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

2.快速开始

使用Spring Initializer快速初始化一个 Spring Boot 工程(工程将以 MySQL 作为默认数据库)

基于Spring Boot 2.7.12MyBatis-Plus 3.5.2配置项目依赖。

添加依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
​
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
​
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
​
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version>
</dependency>
​
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.2</version>
</dependency>
​
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.44</version>
</dependency>

3.安装与配置

application.yml 配置文件中添加 MySQL 数据库的相关配置:

spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 1234url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=false
mybatis-plus:# Mybatis Mapper所对应的XML位置mapper-locations: classpath:mapper/*.xml# 别名包扫描路径type-aliases-package: com.zking.spbootmp.model# 是否开启自动驼峰命名规则(camel case)映射configuration:map-underscore-to-camel-case: true
logging:level:com.zking.spbootmp.mapper: debug

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

@MapperScan({"com.zking.spbootmp.mapper"})
@SpringBootApplication
public class SpbootMpApplication {public static void main(String[] args) {SpringApplication.run(SpbootMpApplication.class, args);}
}

4.代码生成

导入CodeGenerator.java代码生成类。

具体请参考课件资料中的utils目录下的CodeGenerator.java

需要修改CodeGenerator.java类中的数据库名数据库账号密码作者包名即可。

5.综合案例

5.1.主键生成策略

@TableId主键注解,放置于实体类中的主键字段上。

@Getter
@Setter
@TableName("t_book")
public class Book implements Serializable {
​private static final long serialVersionUID = 1L;
​/*** 书本编号*/@TableId("bookid")private String bookid;...
}

  • @TableId注解属性

属性类型必须指定默认值描述
valueString""主键字段名
typeEnumIdType.NONE指定主键类型

@TableId注解type属性IdType主键生成策略介绍:

描述
AUTO数据库 ID 自增
NONE无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUTinsert 前自行 set 主键值
ASSIGN_ID分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

5.2.自动填充

@TableField字段注解(非主键),其中fill字段自动填充策略,具体策略如下:

描述
DEFAULT默认不处理
INSERT插入时填充字段
UPDATE更新时填充字段
INSERT_UPDATE插入和更新时填充字段

注解则是指定该属性在对应情况下必有值,如果无值则入库会是null

  • 自定义实现类 MyMetaObjectHandler

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
​@Overridepublic void insertFill(MetaObject metaObject) {log.info("开始新增操作自动填充 ....");this.strictInsertFill(metaObject, "createdate", LocalDateTime.class, LocalDateTime.now());}
​@Overridepublic void updateFill(MetaObject metaObject) {log.info("开始更新操作自动填充 ....");this.strictUpdateFill(metaObject, "createdate", LocalDateTime.class, LocalDateTime.now());}
}

情况一:fill = FieldFill.DEFAULT,无论是新增和更新都不进行自动填充;

情况二:fill = FieldFill.INSERT,执行新增操作自动填充数据;

情况三:fill = FieldFill.UPDATE,执行更新操作,若字段不为空则自动填充数据;再次执行更新操作不会刷新数据。

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

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

相关文章

写点东西《 Kickstart:搭建 JS 项目的最快方式!》

写点东西《&#x1f680; Kickstart&#xff1a;搭建 JS 项目的最快方式&#xff01;》 如何使用它&#xff1f; 想象一下&#xff1a;你刚刚有一个新的项目创意&#xff0c;你对创意充满热情&#xff0c;并准备好编码。 但是&#xff0c;在实际编写代码之前&#xff0c;您必须…

解决jmeter响应乱码的问题

HTTP请求响应乱码 方法一&#xff1a;添加后置处理器BeanShell PostProcessor&#xff0c;写入【prev.setDataEncoding("utf-8")】 方法二&#xff1a;修改bin目录下的配置文件jmeter.properties&#xff0c;将配置修改为【sampleresult.default.encodingUTF-8】 J…

2024年如何成为技术创作KOL?| 分享抽龙年公仔

引言 2024 年已经到来&#xff0c;你年初的 Flag 立好了吗&#xff1f;今年要创作多少篇文章&#xff1f;要如何获得更大的影响力&#xff1f;如何通过创作来改变自己的职业轨道&#xff1f;你有没有想过&#xff0c;其实成为技术创作领域的一位 KOL&#xff0c;离你并不遥远&a…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑤

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应处理&#xff0c;执行j10*x-y返回文字“j1&#xff1a;”和计算值&#xff0c;执行j(x-y)*(10⁵%7)返回文字“j2&#xff1a;”和计算值&#xff0c;执行jy*log(x10)返回文字“j3&#xff1a;”和计算值…

通义千问AI挑战赛赛后反思

个人理解&#xff1a; 初赛阶段主要聚焦在如何通过 SFT 提升基础模型的代码能力&#xff0c;需要选手基于最新开源的 Qwen 1.8 模型作为基础模型&#xff0c;上分的关键主要通过收集高质量的代码数据提升模型的在Python, JavaScript, Java, Go, C, Rust六种编程语言的代码生成…

若依框架实现排序【升序或降序】很简单

前端实现 1. 在表格上加监听函数sort-change。如下红框所示&#xff1a; 2. 在表行上加排序字:sort-orders&#xff0c;可排序字sortable。如下红框所示&#xff1a; 3. 添加监听函数实现。代码如下&#xff1a; handleSortChange(column) {this.queryParams.orderByColumn …

使用emu8086实现——循环结构程序设计

一、实验目的 1.掌握循环结构程序设计的方法&#xff1b; 2.掌握数据块传送程序设计的方法&#xff1b; 3.掌握串传送指令的应用。 二、实验内容 1、计算S12*33*4...N*(N1)&#xff0c;直到N*(N1)项大于200为止。编写程序&#xff0c;计算上式的结果。 代码及注释&#…

考研经验总结——目录

文章目录 一、写作顺序二、个人情况说明三、读评论四、一些小牢骚五、一些注意事项&#xff08;持续更新&#xff09; 一、写作顺序 我将准备从三个阶段开始介绍吧 考研前考研中考研后&#xff08;也就是现在我的这种情况&#xff09; 考研前我会分为&#xff1a;数学、专业…

国图公考:2024山东省事业单位发布招聘公告

更多信息可以登录山东人事考试信息查看&#xff01;

webpack执行流程知识点总结

webpack的运行流程 Webpack 的运行流程是一个串行的过程&#xff0c;从启动到结束会依次执行以下流程&#xff1a; 在以上过程中&#xff0c;Webpack 会在特定的时间点广播出特定的事件&#xff0c;插件在监听到感兴趣的事件后会执行特定的逻辑&#xff0c;并且插件可以调用 We…

艾瑞报告:HR数字化需关注体系化能力,红海云等标杆厂商引领一体化趋势

新全球化时代背景下&#xff0c;企业经营所面临的国内外环境的不确定性增强&#xff0c;如何从不确定性中找到确定性成了大多数企业的关注要点。近日&#xff0c;艾瑞咨询发布《2023中国人力资源数字化研究报告》&#xff0c;从数字化转型的角度切入&#xff0c;探讨数字化如何…

原型设计工具Axure RP结合内网穿透实现本地web页面公网访问协同办公

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

进阶Docker3:Dokerfile构建镜像

目录 Dockerfile 构建基础镜像 基本机构 命令&#xff1a; 命令解释&#xff1a; 准备工作 创建镜像 上传镜像 Dockerfile Dockerfile 是一个文本格式的配置文件&#xff0c; 用户可以使用 Dockerfile 来快速创建自定义的镜像&#xff0c;另外&#xff0c;使 用Docke…

neo4j图数据库的简单操作记录

知识图谱文件导出 首先停止运行sudo neo4j stop然后导出数据库 导出格式为&#xff1a; 具体命令如下sudo neo4j-admin database dump --to-path/home/ neo4j最后重启sudo neo4j start知识图谱外观修改 在网页点击节点&#xff0c;选中一个表情后点击&#xff0c;可修改其颜…

Beauty algorithm(七)瘦脸

瘦脸的实现采用局部平移法。 一、skills 前瞻 局部平移 二、目标区域定位 左脸: 关键点选择3、5点,基点30 rmax:计算两点5-3间的距离, |x-c|:图像任一点到固定基点c的距离 |m-c|:两固定点距离 右脸: 关键点选择

开发企业微信中的内嵌h5时如何开发与调试

前言&#xff1a; 在我们的项目中&#xff0c;开发企业微信内部的项目的话&#xff0c;分为两种&#xff0c;1种是直接开发企业微信的小程序&#xff0c;另一种则是企业微信内嵌我们的H5界面&#xff0c;我们这里讲一讲企业微信内嵌h5的方法与注意点。 1、开发h5项目 这点没有…

muduo网络库剖析——套接字Socket类

muduo网络库剖析——套接字Socket类 前情从muduo到my_muduo 概要socket网络编程socket编程接口介绍头文件socketbindlistenacceptaccept4connect 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多…

Vue3-46-Pinia-获取全局状态变量的方式

使用说明 在 Pinia 中&#xff0c;获取状态变量的方式非常的简单 &#xff1a; 就和使用对象一样。 使用思路 &#xff1a; 1、导入Store&#xff1b;2、声明Store对象&#xff1b;3、使用对象。 在逻辑代码中使用 但是 Option Store 和 Setup Store 两种方式定义的全局状态变量…

推荐一款实用的免费开源局域网传输工具!轻松搭建网盘的神器!

本文小编给大家分享一款免费开源软件 Filebrowser&#xff0c;使用它可以轻松搭建属于你的个人网盘和网页版文件管理器。 它能做什么呢&#xff1f;想必大家也都用过百度网盘或阿里云盘之类的云存储服务&#xff0c;将自己的所有数据都存储在别人的服务器上&#xff0c;所谓的在…

如何实现一个好用的全链路多测试环境(HTTP篇)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 背景 随着公司的发展&#xff0c;研发的系统和开发人员会变得越来越多。但是测试环境却始终只有一个&#xff0c;所以久而久之&#xff0c;我们就发现研发经常遇…