【Java系列】Mybatis-Plus 使用介绍二

news2024/10/7 17:35:40

序言

你只管努力,其他交给时间,时间会证明一切。

MyBatis-Plus 是 MyBatis 的增强工具,它简化了 MyBatis 的开发,并提供了许多实用的功能和工具类。下面是 MyBatis-Plus 的使用方法:

1 使用方法

1. 引入依赖

在 Maven 项目中,需要在 pom.xml 文件中添加如下依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.1</version>
</dependency>

其中 mybatis-plus-boot-starter 是 MyBatis-Plus 的 Spring Boot Starter。

2. 配置 MyBatis-Plus

在 Spring Boot 项目中,可以通过在 application.properties 或 application.yml 文件中配置 MyBatis-Plus。例如:

mybatis-plus:
  # mapper 文件的路径,多个值用逗号隔开
  mapper-locations: classpath:mapper/*.xml
  # 实体类所在的包路径,多个值用逗号隔开
  typeAliasesPackage: com.example.demo.entity

3. 编写实体类

使用 MyBatis-Plus 时,需要编写实体类,并在实体类上添加注解。例如:

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

在这个实体类中,使用了 Lombok 的 @Data 注解自动生成 getter 和 setter 方法,@NoArgsConstructor 和 @AllArgsConstructor 注解自动生成无参和全参构造方法,@TableName 注解指定了实体类对应的数据库表名,@TableId 注解指定主键的生成方式。

4. 编写 Mapper 接口

使用 MyBatis-Plus 时,可以不用编写 SQL 语句,只需要编写 Mapper 接口,并让该接口继承 MyBatis-Plus 提供的 BaseMapper 接口。例如:

public interface UserMapper extends BaseMapper<User> {
}

在这个接口中,继承了 MyBatis-Plus 提供的 BaseMapper 接口,即可使用 MyBatis-Plus 提供的增删改查方法。

5. 使用 MyBatis-Plus 提供的增删改查方法

在编写 Mapper 接口后,即可在 Service 层中使用 MyBatis-Plus 提供的增删改查方法。例如:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getUserList() {
        return userMapper.selectList(null);
    }

    @Override
    public User getUserById(Long id) {
        return userMapper.selectById(id);
    }

    @Override
    public void saveUser(User user) {
        userMapper.insert(user);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateById(user);
    }

    @Override
    public void deleteUser(Long id) {
        userMapper.deleteById(id);
    }
}

在这个 Service 实现类中,使用了 MyBatis-Plus 提供的增删改查方法,例如 selectListselectByIdinsertupdateById 和 deleteById 等方法。这些方法的参数和返回值都非常简单,使用起来非常方便。

2 构造器介绍

1 LambdaQueryWrapper介绍

LambdaQueryWrapper 是 MyBatis-Plus 提供的一个查询条件构造器,它可以通过 Lambda 表达式来构造查询条件,使得查询条件更加简洁、易读。下面是 LambdaQueryWrapper 的具体使用方法介绍:

1.1 创建 LambdaQueryWrapper 对象

在使用 LambdaQueryWrapper 之前,需要先创建 LambdaQueryWrapper 对象。例如:

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();

在创建 LambdaQueryWrapper 对象时,需要指定实体类的类型,这里以 User 类为例。

1.2 构造查询条件

使用 LambdaQueryWrapper 可以很方便地构造查询条件。例如:

queryWrapper.eq(User::getName, "张三"); // 等于
queryWrapper.ne(User::getAge, 18); // 不等于
queryWrapper.gt(User::getAge, 20); // 大于
queryWrapper.ge(User::getAge, 20); // 大于等于
queryWrapper.lt(User::getAge, 30); // 小于
queryWrapper.le(User::getAge, 30); // 小于等于
queryWrapper.like(User::getName, "张"); // 模糊查询
queryWrapper.in(User::getAge, Arrays.asList(20, 25, 30)); // in 查询
queryWrapper.isNull(User::getEmail); // 判断为 null
queryWrapper.isNotNull(User::getEmail); // 判断不为 null

在上面的例子中,使用了 Lambda 表达式来指定查询条件,例如 User::getName 表示查询 User 实体类中的 name 属性。

1.3 组合查询条件

使用 LambdaQueryWrapper 可以很方便地组合查询条件。例如:

queryWrapper.eq(User::getName, "张三").and(qw -> qw.lt(User::getAge, 30).or().isNotNull(User::getEmail));

在上面的例子中,使用了 and 和 or 方法来组合查询条件,实现了一个复杂的查询条件。

1.4 执行查询操作

使用构造好的 LambdaQueryWrapper 对象,可以执行查询操作。例如:

List<User> userList = userMapper.selectList(queryWrapper);

在使用 selectList 方法时,将 LambdaQueryWrapper 对象作为参数传入,即可执行查询操作。同理,还可以使用 selectOne、selectCount 等方法执行查询操作。

以上是 LambdaQueryWrapper 的具体使用方法介绍,通过使用 LambdaQueryWrapper,可以很方便地构造查询条件,使得查询操作更加简洁、易读。

2 LambdaUpdateWrapper介绍 

LambdaUpdateWrapper 是 MyBatis-Plus 提供的一个更新条件构造器,它可以通过 Lambda 表达式来构造更新条件,使得更新操作更加简洁、易读。

下面是 LambdaUpdateWrapper 的具体使用方法介绍:

1. 创建 LambdaUpdateWrapper 对象

在使用 LambdaUpdateWrapper 之前,需要先创建 LambdaUpdateWrapper 对象。例如:

LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();

在创建 LambdaUpdateWrapper 对象时,需要指定实体类的类型,这里以 User 类为例。

2. 构造更新条件

使用 LambdaUpdateWrapper 可以很方便地构造更新条件。例如:

updateWrapper.eq(User::getName, "张三").set(User::getAge, 30); // 等于
updateWrapper.ne(User::getAge, 18).set(User::getEmail, "test@test.com"); // 不等于
updateWrapper.gt(User::getAge, 20).set(User::getEmail, "test@test.com"); // 大于
updateWrapper.ge(User::getAge, 20).set(User::getEmail, "test@test.com"); // 大于等于
updateWrapper.lt(User::getAge, 30).set(User::getEmail, "test@test.com"); // 小于
updateWrapper.le(User::getAge, 30).set(User::getEmail, "test@test.com"); // 小于等于

在上面的例子中,使用了 Lambda 表达式来指定更新条件,例如 User::getName 表示更新 User 实体类中的 name 属性。

3. 组合更新条件

使用 LambdaUpdateWrapper 可以很方便地组合更新条件。例如:

updateWrapper.eq(User::getName, "张三").and(qw -> qw.lt(User::getAge, 30).or().isNotNull(User::getEmail)).set(User::getAge, 20);

在上面的例子中,使用了 and 和 or 方法来组合更新条件,实现了一个复杂的更新条件。

4. 执行更新操作

使用构造好的 LambdaUpdateWrapper 对象,可以执行更新操作。例如:

userMapper.update(null, updateWrapper);

在使用 update 方法时,将 LambdaUpdateWrapper 对象作为参数传入,即可执行更新操作。同理,还可以使用 updateById、updateBatchById 等方法执行更新操作。

通过使用 LambdaUpdateWrapper,可以很方便地构造更新条件,使得更新操作更加简洁、易读。

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

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

相关文章

MySQL数据库 9.DQL操作

目录 ​编辑 &#x1f914;前言&#xff1a; &#x1f914;DQL介绍&#xff1a; &#x1f914;查询种类&#xff1a; 1.基本查询&#xff1a; &#x1f50d;1.查询多个字段&#xff1a; &#x1f50d;2.查询所有字段&#xff1a; &#x1f50d;3.去除重复记录&#xff…

【数据结构】常见排序算法——常见排序介绍、插入排序、直接插入排序、希尔排序

文章目录 1.排序的概念和应用1.1排序的概念1.2排序的运用1.3常见的排序算法 2.常见的排序算法2.1插入排序2.1.1直接插入排序2.1.2希尔排序 1.排序的概念和应用 1.1排序的概念 在计算机科学中&#xff0c;排序是将一组数据按照指定的顺序排列的过程。排序算法由于执行效率的不同…

01_爬虫基础知识和requests模块简介

爬虫基础知识 1、爬虫简介: 爬虫的作用:帮助我们把网站信息快速提取并保存爬虫的分类: 通用爬虫聚集爬虫爬虫的安全知识:目前来说,无明确法律规定,但每个官网都有自己的爬虫协议(网址后面加/robots.txt)爬虫的爬取流程: 1、获取网页2、提取信息3、保存数据2、爬虫必须…

分布式软件架构——远程服务调用

序言 “架构师”可以是做企业战略设计的架构师&#xff0c;也可以说做业务流程分析的架构师。 架构师视角特指软件系统中技术模型的系统设计者。 在做架构设计的时候&#xff0c;架构师应该思考哪些问题、可以选择哪些主流的解决方案和行业标准做法&#xff0c;以及这些主流方…

【自制C++深度学习框架】前言

KuiperCourse 介绍 此GitHub项目是一个初学者的深度学习框架&#xff0c;使用C编写&#xff0c;旨在为用户提供一种简单、易于理解的深度学习实现方式。以下是本项目的主要特点和功能&#xff1a; 计算图&#xff1a;使用计算图来描述深度学习模型的计算过程&#xff0c;利用计…

气球飘飘:用Java Swing创造令人心旷神怡的视觉奇观

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;Java经典程序设计 前言&#xff1a;这篇博客在手机上打开可能会自动播放视频&#xff0c;视频有音乐&#xff0c;请及时关闭手机音乐哈&#x1f642; 目录 ✨导语 ✨引言 ✨简单介绍一下Javaswing这项技术简单介绍一下Javaswi…

简单的UDP网络程序·续写

该文承接文章 简单的UDP网络程序 对于客户端和服务端的基本源码参考上文&#xff0c;该文对服务器润色一下&#xff0c;并且实现几个基本的业务服务逻辑 目录 demo1 第一个功能&#xff1a;字典翻译 初始化字典 测试代码&#xff1a;打印 字符串分割 客户端修改 成品效果…

idea如何一个项目启动两个tomcat服务(不同端口)

目录 第一步&#xff1a;创建一个普通的springboot项目 第二步&#xff1a;编写一个controller代码&#xff0c;用来接收请求 第三步&#xff1a;复制服务&#xff0c;端口设置为8081 第四步&#xff1a;依次访问8080、8081两个服务进行测试 第一步&#xff1a;创建一个普通…

基于JavaWeb的保护动物管理系统设计与实现

摘要&#xff1a;随着全球一些稀有物种、野生动物日益稀少&#xff0c;保护动物已经成为全球多个国家开始重视并投入大量物力着手解决的重要课题。动物是大自然的产物&#xff0c;自然界是由许多复杂的生态系统构成的。有一种植物消失了&#xff0c;以这种植物为食的昆虫就会消…

easyExcel导入失败提示用户第几行有误并回滚数据

思路&#xff1a; 在controller定义一个map&#xff0c;将map传入excel监听器&#xff0c;在监听器中处理excel的数据&#xff0c;读取到某一行出现错误就将错误提示信息存入map并抛出一个异常给service。在service方法上开启事务&#xff0c;并将异常出实现数据回滚&#xff0…

vite使用vue3 v-for渲染图片时的写法

写法一 <template><divclass"demo-img"v-for"item in demoOption":key"item.code":style"background-image: url(${getImageUrl(../assets/imge/${item.img}.jpeg)})"></div> </template><script lang&qu…

2023网安最流行的10大工具(附安装包)

从事网络安全工作&#xff0c;手上自然离不开一些重要的网络安全工具。今天&#xff0c;分享10大网络安全工具。 一、Kali Linux Kali 是一个基于 Debian 的 Linux 发行版。它的目标就是为了简单&#xff1a;在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这…

Linux 之Python 定制篇-APT 软件管理和远程登录

Linux 之Python 定制篇-APT 软件管理和远程登录 apt 介绍 apt 是Advanced Packaging Tool 的简称&#xff0c;是一款安装包管理工具。在Ubuntu 下&#xff0c;我们可以使用apt 命令进行软件包的安装、删除、清理等&#xff0c;类似于Windows 中的软件管理工具。 unbuntu 软件…

【C++】深拷贝浅拷贝

前言&#xff1a;在 C 中&#xff0c;当一个对象通过赋值或拷贝即将成为另一个对象的副本时&#xff0c;会发生“浅拷贝”或“深拷贝”。 什么是浅拷贝&#xff1f; 浅拷贝是指两个对象共享同一个内存地址&#xff0c;即将源对象的数据成员的地址赋给了目标对象&#xff0c;当…

vue diff算法与虚拟dom知识整理(15) 终结篇,收尾新前到旧前全部不匹配情况

我们现在就只需要处理最后一种情况了 我们在 updateChildren.js 在while中 的if最后加个 else 当他们都没哟匹配到的情况 我们现在在updateChildren.js最上面 定义一个空对象 叫 keyMap 参考代码如下 let keyMap null;然后 在我们刚写的else中编写代码如下 //判断 如果…

Stable-Diffusion|入门怎么下载与使用civitai网站的模型(二)

C站&#xff1a;https://civitai.com/ 文章目录 1 样图2 实现2.1 下载主模型并放到正确文件夹中2.2 找到prompt2.3 生成2.4 Lora使用 3 一些有趣的项目3.1 胶片风格Lora3.2 [最近很火] 现实感很强的Majicmix-realistic 先贴几张笔者自己实验的图&#xff0c;模型来自&#xff1…

Libevent学习

一、Libevent概述 1、简介 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff0c;不如 ACE 那么臃肿庞大&…

C++必背基础知识点总结

重点&#xff1a;不借助任何外部资料就能掌握&#xff0c;考试面试大概率涉及。 掌握&#xff1a;不借助任何外部资料就能掌握&#xff0c;考试面试有可能涉及。 熟悉&#xff1a;可以适当参考资料掌握&#xff0c;考试面试有可能涉及。 了解&#xff1a;可是参考资料掌握&…

iptables的四表五链

文章目录 1. Iptables的链2.Iptables的表3.数据包过滤的匹配流程3.1 规则表之间的顺序3.2 规则链之间的顺序3.3 规则链内部各条防火墙规则之间的顺序3.4如何应用 每个 规则表&#xff0c;其实就相当于一个内核空间的容器&#xff0c; 按照规则集的不同用途进行划分为默认的四…

w11+wsl+3060安装cuda等深度学习环境

把一切都重新又梳理学习了一遍&#xff0c;然后发现很多事情其实没必要弄 0. 显卡驱动、nvidia-smi、cuda、nvcc、cuDNN、pytorch、cudatoolkit与它们之间的关系 笔者本人鸟枪换炮了&#xff0c;还是wsl环境香&#xff0c;但是按照官方教程跑完后&#xff0c;遇到了bugRuntim…