Wrapper
在MyBatis-Plus中,对于单表的查询我们基本上不用写sql语句的,那么对于一些带有条件判断的sql语句怎么办呢,官方提供了一个很强的东西——Wrapper条件构造器。
环境搭建
首先创建一张数据库表
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
对应的数据如下
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
创建SpringBoot项目
创建一个普通的SpringBoot项目,然后引入依赖,既然要跟数据库打交道,connector肯定不能少
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
另外要使用mybatis-plus,当然也要引入该starter
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
为了方便起见,这里引入Lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
好了,依赖引入完毕,下面进行简单配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_plus?userSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: root
配置也写好了,那么可以开始用了,在操作之前需要先创建一个实体类。
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
实体类写好之后,编写一个mapper接口,只需继承BaseMapper,基本的单表查询都给你封装好了,真是太贴心了。
@Repository
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
开启日志
在官网中,有很多的条件构造器,这里演示几个比较常用的,其实本质还是sql语句,为了方便大家可以看到效果,这里开启日志功能。
只需在配置文件中加上这句话即可
# 配置日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Wrapper测试
Wrapper是一个接口,官方提供了很多的实现类,我们通过其实现类去构造wrapper对象即可。
查询name不为空,且年龄大于等于20的用户
void wrapperTest1() {
QueryWrapper<User> wrapper = new QueryWrapper<>();// 构建一个查询的wrapper
wrapper
.isNotNull("name")// 设置查询条件,name字段不为空
.ge("age", 20);// 年龄大于等于20
userMapper.selectList(wrapper);
}
可以清楚的看到,这里生成的sql语句。
查询名字等于Jack的
void wrapperTest2() {
QueryWrapper<User> wrapper = new QueryWrapper<>();// 构建一个查询的wrapper
wrapper.eq("name", "Jack");// 设置name为Jack的条件
userMapper.selectOne(wrapper);// 这里我们知道只有一个,所以直接用selectOne
}
范围查询
void wrapperTest3() {
QueryWrapper<User> wrapper = new QueryWrapper<>();// 构建一个查询的wrapper
wrapper.between("age",20, 30);// 设置范围
userMapper.selectCount(wrapper);// 查询在该范围的数量
}
模糊查询
void wrapperTest4() {
QueryWrapper<User> wrapper = new QueryWrapper<>();// 构建一个查询的wrapper
wrapper
.notLike("name", "e")// 查询name中不含有e的
.likeRight("email", "t");// 查询email中右模糊t->t%
userMapper.selectList(wrapper);
}
降序排序
void wrapperTest5() {
QueryWrapper<User> wrapper = new QueryWrapper<>();// 构建一个查询的wrapper
wrapper.orderByDesc("id");// 降序排序
userMapper.selectList(wrapper);
}
标签:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)