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

news/2024/11/30 10:41:23/

序言

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

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 {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> getUserList() {return userMapper.selectList(null);}@Overridepublic User getUserById(Long id) {return userMapper.selectById(id);}@Overridepublic void saveUser(User user) {userMapper.insert(user);}@Overridepublic void updateUser(User user) {userMapper.updateById(user);}@Overridepublic 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.ppmy.cn/news/212664.html

相关文章

Node服务器和常见模块

1 Node服务器开发 2 fs模块-文件系统 3 event模块-事件处理 4 认识二进制和buffer 5 Buffer的创建方式 6 Buffer的源码解析 node 的fs模块操作&#xff1a; 这里主要讲node如何进行读取文件&#xff0c;操作文件。服务器该有的操作node都有。 node的fs读取文本文件内容的d…

从0-1一起学习live555设计思想之一 基础运行环境 + 任务调度

系列文章目录 文章目录 系列文章目录前言一、基础组件总览二、UsageEnvironment三、BasicUsageEnvironment0四、BasicUsageEnvironment五、TaskScheduler六、BasicTaskScheduler0七、DelayQueue八、BasicTaskScheduler九、基础调度总结总结前言 一、基础组件总览 本篇开始分析…

iPhone 全系尺寸大全

iPhone 设备尺寸信息

oppofindx5pro参数配置

OPPOFindX5Pro背部采用了更为先进的工艺制程&#xff0c;官方称之为“一体化纳米微晶陶瓷”&#xff0c;手感相比上一代有了大幅提升&#xff0c;温润如玉&#xff0c;但手感太滑了&#xff0c;很多时候我都是双手握持&#xff0c;由于电池容量的增加&#xff0c;这款手机的厚度…

判断手机型号

- (NSString*)deviceString { // 需要#import "sys/utsname.h" struct utsname systemInfo; uname(&systemInfo); NSString *deviceString [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; if ([deviceString isEqualToString…

MySQL代码错误号大全

错误&#xff1a;1000 SQLSTATE: HY000 (ER_HASHCHK) 消息&#xff1a;hashchk 错误&#xff1a;1001 SQLSTATE: HY000 (ER_NISAMCHK) 消息&#xff1a;isamchk 错误&#xff1a;1002 SQLSTATE: HY000 (ER_NO) 消息&#xff1a;NO 错误&#xff1a;1003 SQLSTATE: HY0…

viv代码分析(一)

本博客转载于&#xff1a;http://www.cnblogs.com/tureno/articles/4445393.html 通过vivi研究bootloader有一段时间了&#xff0c;基本是在与之相关的基础方面做工作&#xff0c;还没有真正深入研究vivi。以后的学习重心就要放到研究vivi源代码上面了。我想&#xff0c;真正细…

vi 简介

vi简介 vi是“Visual interface”的简称&#xff0c;它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、 替换、块操作等众多文本操作&#xff0c;而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序&#xff0c;它不象Word或WPS那样可以对…