Mybatis-plus对单表操作的封装

MyBatis-Plus单表操作详解及拓展

MyBatis-Plus是一个基于MyBatis的增强工具,它提供了丰富的CRUD操作和分页查询等功能,极大地简化了开发人员的数据库操作。本文将详细介绍MyBatis-Plus官方已经写好的单表操作,并提供一些拓展内容。

1. 引言

在进行单表操作之前,我们需要定义一个实体类和对应的Mapper接口。以下是一个简单的实体类和Mapper接口示例:

@Data
@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private Integer age;
}@Mapper
public interface UserMapper extends BaseMapper<User> {
}

在实体类上使用@TableName注解指定对应的数据库表名,使用@TableId注解指定主键字段。在Mapper接口上使用@Mapper注解标识该接口为Mapper接口,并继承BaseMapper<User>,这样就可以直接使用MyBatis-Plus提供的CRUD操作方法。

2. 单表操作

2.1 插入操作

插入操作可以使用insert方法,示例代码如下:

User user = new User();
user.setUsername("Tom");
user.setPassword("123456");
user.setAge(18);UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.insert(user);
if (result > 0) {System.out.println("插入成功");
}

2.2 查询操作

查询操作可以使用selectByIdselectListselectPage等方法,示例代码如下:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 根据ID查询
User user = userMapper.selectById(1L);// 根据条件查询
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, "Tom");
List<User> userList = userMapper.selectList(queryWrapper);// 分页查询
Page<User> page = new Page<>(1, 10);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(User::getAge);
IPage<User> resultPage = userMapper.selectPage(page, queryWrapper);
List<User> userList = resultPage.getRecords();

2.3 更新操作

更新操作可以使用updateById方法,示例代码如下:

User user = new User();
user.setId(1L);
user.setUsername("Jerry");
user.setPassword("654321");
user.setAge(20);UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.updateById(user);
if (result > 0) {System.out.println("更新成功");
}

2.4 删除操作

删除操作可以使用deleteByIddeleteBatchIdsdelete等方法,示例代码如下:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 根据ID删除
int result = userMapper.deleteById(1L);
if (result > 0) {System.out.println("删除成功");
}// 根据条件删除
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, "Tom");
int result = userMapper.delete(queryWrapper);
if (result > 0) {System.out.println("删除成功");
}

3. 拓展内容

除了官方提供的基本CRUD操作外,MyBatis-Plus还提供了许多其他功能和拓展,以下是一些常用的拓展内容:

3.1 自定义SQL

如果需要自定义SQL语句,可以使用BaseMapper提供的selectListselectByIdinsertupdateByIddeleteById等方法的重载版本,传入Wrapper对象和RowBounds对象进行自定义查询和分页。

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 自定义SQL查询
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(User::getId, User::getUsername).orderByAsc(User::getAge);
List<User> userList = userMapper.selectList(queryWrapper, new RowBounds(0, 10));// 自定义SQL插入
User user = new User();
user.setUsername("CustomUser");
user.setPassword("password");
user.setAge(25);
int result = userMapper.insert(user, new InsertWrapper<User>().setSql("INSERT INTO user(username, password, age) VALUES(#{username}, #{password}, #{age})"));// 自定义SQL更新
User updateUser = new User();
updateUser.setId(1L);
updateUser.setUsername("UpdatedUser");
updateUser.setPassword("updatedPassword");
int result = userMapper.updateById(updateUser, new UpdateWrapper<User>

3.2 逻辑删除

MyBatis-Plus提供了逻辑删除功能,可以通过配置实体类和数据库表字段实现。逻辑删除是指在数据库中将记录的删除标志位设置为已删除,而不是物理删除记录。这样可以避免误删除数据,同时也可以满足一些特殊需求,例如数据恢复、数据审计等。

要使用逻辑删除功能,需要在实体类上使用@TableLogic注解标识删除标志位字段,并在Mapper接口上使用@Mapper注解的logicDelete属性启用逻辑删除功能。示例代码如下:

@Data
@TableName("user")
@TableLogic(value = "deleted", delval = "1")
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private Integer age;private Integer deleted;
}@Mapper(logicDelete = true)
public interface UserMapper extends BaseMapper<User> {
}

在实体类上使用@TableLogic注解指定删除标志位字段和已删除值,在Mapper接口上使用@Mapper注解的logicDelete属性启用逻辑删除功能。这样就可以使用deleteByIddeleteBatchIdsdelete等方法进行逻辑删除操作。

3.3 乐观锁

MyBatis-Plus提供了乐观锁功能,可以通过配置实体类和数据库表字段实现。乐观锁是一种并发控制策略,它假设多个事务并发执行时不会发生冲突,每个事务在提交时都会验证其操作的数据是否已经被其他事务修改过。如果发现数据已经被修改,则当前事务会回滚,避免了数据不一致的问题。

要使用乐观锁功能,需要在实体类上使用@Version注解标识版本号字段,并在Mapper接口上使用@Mapper注解的optimisticLocker属性启用乐观锁功能。示例代码如下:

@Data
@TableName("user")
@Version
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private Integer age;private Integer version;
}@Mapper(optimisticLocker = true)
public interface UserMapper extends BaseMapper<User> {
}

在实体类上使用@Version注解标识版本号字段,在Mapper接口上使用@Mapper注解的optimisticLocker属性启用乐观锁功能。这样就可以使用updateById等方法进行乐观锁更新操作。

3.4 全局拦截器

MyBatis-Plus提供了全局拦截器功能,可以通过实现Interceptor接口自定义拦截器,并在配置文件中注册拦截器。全局拦截器可以拦截所有的SQL语句,并在SQL执行前后进行一些自定义操作,例如记录日志、权限校验等。

示例代码如下:

@Component
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
public class MyInterceptor implements Interceptor {@Overridepublic InterceptResult intercept(Invocation invocation) throws Throwable {// 在SQL执行前进行一些自定义操作System.out.println("Before SQL: " + invocation.getTarget());// 执行SQL语句Object result = invocation.proceed();// 在SQL执行后进行一些自定义操作System.out.println("After SQL: " + invocation.getTarget());return InterceptResult.success(result);}
}

实现Interceptor接口,并使用@Intercepts注解标识拦截的方法和参数类型。在intercept方法中进行自定义操作,并使用invocation.proceed()执行SQL语句。最后返回InterceptResult.success(result)表示拦截器执行成功。

在配置文件中注册拦截器,示例代码如下:

<mybatis-plus><configuration><interceptors><interceptor class="com.example.MyInterceptor"/></interceptors></configuration>
</mybatis-plus>

mybatis-plus标签中配置configuration标签,在configuration标签中配置interceptors标签,在interceptors标签中配置自定义拦截器类。

3.5 代码生成器

MyBatis-Plus提供了代码生成器功能,可以通过配置文件自动生成实体类、Mapper接口、Service接口和Controller接口等代码。代码生成器可以大大提高开发效率,避免重复劳动。

示例代码如下:

<mybatis-plus-generator><global-config><output-dir>D:\code\mybatis-plus-generator\src\main\java</output-dir><author>zhangsan</author><open>false</open></global-config><data-source><url>jdbc:mysql://localhost:3306/mybatis_plus</url><username>root</username><password>123456</password><driver-class-name>com.mysql.jdbc.Driver</driver-class-name></data-source><package-info><module-name>user</module-name><parent>com.example</parent></package-info><strategy><table-prefix>t_</table-prefix><entity-lombok-model>true</entity-lombok-model><rest-controller-style>true</rest-controller-style><controller-mapping-hyphen-style>true</controller-mapping-hyphen-style><include>t_user</include></strategy>
</mybatis-plus-generator>

mybatis-plus-generator标签中配置代码生成器的全局配置、数据源配置、包信息配置和策略配置。在global-config标签中配置输出目录、作者信息和是否自动打开生成的文件夹。在data-source标签中配置数据库连接信息。在package-info标签中配置包名信息。在strategy标签中配置表名前缀、实体类是否使用Lombok注解、Controller接口是否使用RESTful风格和需要生成的表名。

运行代码生成器后,会自动生成实体类、Mapper接口、Service接口和Controller接口等代码。

4. 总结

MyBatis-Plus是一个非常强大的ORM框架,它提供了丰富的CRUD操作和分页查询等功能,同时也提供了许多其他功能和拓展,例如自定义SQL、逻辑删除、乐观锁、全局拦截器和代码生成器等。使用MyBatis-Plus可以大大提高开发效率,同时也可以满足一些特殊需求。

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

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

相关文章

爬虫 - 基于requests进行二次开发

项目地址 https://github.com/markadc/wauo.git持续更新中…

树,二叉树的基本概念介绍,二叉树的性质

目录 树 树的定义 树的相关概念 树的存储结构 树在实际中的运用&#xff08;表示文件系统的目录树结构 &#xff09; 二叉树 二叉树的定义 现实中的二叉树 二叉树的特点 特殊的二叉树 1.斜树 2.满二叉树 3.完全二叉树 二叉树的性质 性质1&#xff1a;二叉树的第…

嵌入式C语言教程:实现DMA控制的高速SPI通信

在高速数据传输应用中&#xff0c;SPI&#xff08;串行外设接口&#xff09;是一种常用的通信协议。 利用DMA&#xff08;直接内存访问&#xff09;进行SPI数据传输可以显著提高数据处理效率&#xff0c;减少CPU的负载。 本文将详细介绍如何在STM32微控制器上配置和使用DMA来…

2012NOIP普及组真题 2. 寻宝

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1958 核心思想&#xff1a;&#xff08;模拟&#xff09; 1、模拟 每一层从起始房间开始&#xff0c;轮询 x 个有楼梯的房间后到达终点房间 2、由于 0 < N ≤ 10000 &#xff0c; 0…

网络基础(1)网络编程套接字UDP

要完成网络编程首先要理解原IP和目的IP&#xff0c;这在上一节已经说明了。 也就是一台主机要进行通信必须要具有原IP和目的IP地址。 端口号 首先要知道进行网络通信的目的是要将信息从A主机送到B主机吗&#xff1f; 很显然不仅仅是。 例如唐僧要去到西天取真经&#xff0…

源码篇--Nacos服务--中章(8):Nacos服务端感知客户端实例变更-3

文章目录 前言一、客户端实例变更&#xff1a;二、实例变更感知&#xff1a;2.1 实例注册信息通知&#xff1a;2.1.1 接收DistroDataRequest 请求&#xff1a;2.1.2 onReceive 处理请求&#xff1a;2.1.3 processData 处理请求&#xff1a;2.1.4 handlerClientSyncData 处理数据…

Optimistic乐观挑战游戏Sharelock审计大赛

1. 引言 Optimistic的Sherlock审计大赛已进入升级期&#xff0c;fault proofs距离OP主网上线又更近一步了。本文将分享一些初步竞赛结果以及通往Stage 1的后续安排。 2. 审计状态更新 2024年3月27日&#xff0c;Optimistic团队开始针对拟议的 OP Stack fault proof系统进行 …

MySQL修改密码过期时间

1、my.ini中设置 [mysqld] #过期时间90天 default_password_lifetime90 2、或者 SET GLOBAL default_password_lifetime 90; 3、或者 ALTER USER usernamehostname PASSWORD EXPIRE INTERVAL 90 DAY; 4、查看过期时间 SHOW VARIABLES LIKE default_password_lifetime; …

k8s集群Grafana精选dashboard页面

文章目录 参考文档 Grafana自选模板推荐模板&#xff1a;13332、13824、14518Grafana默认配置我们选择 Node Exporter/Nodes 的 Dashboard 进去&#xff1a;点击 Kubernetes/Networking/Cluster 进去使用模板查看结果 Grafana接入Prometheus数据Grafana添加监控模板导入 1860_r…

光伏电站运维的重要性!

随着可再生能源的不断发展和应用&#xff0c;光伏电站成为了当下热门的能源产业之一。然而&#xff0c;光伏电站的运维管理却常常被忽视。光伏电站系统运维管理的重要性不容忽视&#xff0c;它直接关系着光伏电站的稳定运行、发电效率以及长期收益。 1.保证光伏电站的正常运行…

体验用AI写代码

近两年&#xff0c;AI确实迎来了大爆发&#xff0c;2023年也成了AI时代的元年&#xff0c;去年下半年的时候&#xff0c;国内月之暗面出品的Kimi成了新的AI热门&#xff0c;也体验用Kimi修改论文&#xff0c;以及用图片生成代码&#xff0c;代码准确度还是蛮高的。做为SRE&…

使用Python的Tkinter库创建你的第一个桌面应用程序

文章目录 准备工作创建窗口和按钮代码解释运行你的应用程序结论 在本教程中&#xff0c;我们将介绍如何使用Python的Tkinter库创建一个简单的桌面应用程序。我们将会创建一个包含一个按钮的窗口&#xff0c;点击按钮时会在窗口上显示一条消息。 准备工作 首先&#xff0c;确保…

【LeetCode题库】1068. 产品销售分析 I —— MySQL 性能提升,using()关键字

文章目录 原题题解解题笔记 我是一名立志把细节都说清楚的博主&#xff0c;欢迎【关注】&#x1f389; ~ 原创不易&#xff0c; 如果有帮助 &#xff0c;记得【点赞】【收藏】 哦~ ❥(^_-)~ 如有错误、疑惑&#xff0c;欢迎【评论】指正探讨&#xff0c;我会尽可能第一时间回…

扩展大型视觉-语言模型的视觉词汇:Vary 方法

在人工智能领域&#xff0c;大型视觉-语言模型&#xff08;LVLMs&#xff09;正变得越来越重要&#xff0c;它们能够处理多种视觉和语言任务&#xff0c;如视觉问答&#xff08;VQA&#xff09;、图像字幕生成和光学字符识别&#xff08;OCR&#xff09;。然而&#xff0c;现有…

互联网的路由选择协议

一、内部网关协议RIP &#xff08;1&#xff09;概述 RIP是一种分布式的、基于距离向量的路由选择协议。 RIP认为一个好的路由就是它通过的路由器的数目少&#xff0c;即“距离短”RIP允许一条路径最多只能包含15个路由器 &#xff08;2&#xff09;RIP的特点 和谁交换信息…

Docker--compose概述与部署

目录 一、概述 1. Compose简介 1.1 docker compose常用命令 1.2 Compose配置常用字段 2. YAML简介 2.1 YAML支持的数据结构 2.2 YML文件编写注意事项 2.3 Docker Compose文件结构 3. Docker-Compose安装 ​编辑 4.docker Compose撰写nginx 镜像 1. 准备环境 ​编辑…

Zabbix 安装部署说明文档

Zabbix是一个开源的网络监控和管理系统&#xff0c;其架构设计用于提供企业级的监控解决方案。以下是Zabbix的主要组件&#xff1a; 1.Zabbix Server&#xff1a;这是Zabbix系统的核心组件&#xff0c;负责接收Agent程序报告的系统可用性、系统完整性和统计数据。Zabbix Serve…

CSS 06

精灵图 为什么要使用精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度,因此&#xff0c;为了有效地减少服务…

【深度学习】YOLOv5,金属表面的缺陷检测,GC10-DET数据集

目录&#xff1a; 文章目录 数据集数据集转换下载yolov5创建 dataset.yaml训练参数开始训练数据分布训练结果问询、帮助 数据集 数据集地址&#xff1a; https://github.com/lvxiaoming2019/GC10-DET-Metallic-Surface-Defect-Datasets 数据集下载方式&#xff1a; Downlo…

通过MybatisPlus实现字段自动填充功能

MyBatisPlus中使用 TableField完成字段自动填充功能。 一、字段填充策略 FieldFill DEFAULT默认不处理INSERT插入填充字段UPDATE更新填充字段INSERT_UPDATE插入和更新填充字段 二、自动填充拦截器 MetaObjectHandler MetaObjectHandler 是 MyBatis 提供的一个用于操作对象属…