前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >T系列项目讲解笔记5/6:后端条件查询

T系列项目讲解笔记5/6:后端条件查询

作者头像
Designer 小郑
发布2024-07-19 08:38:57
590
发布2024-07-19 08:38:57
举报
文章被收录于专栏:跟着小郑学JAVA

博主介绍:全网粉丝10W+,CSDN博客专家、全栈领域优质创作者,3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型。 研究方向:SpringBoot、Vue.JS、MyBatisPlus、Redis、SpringSecurity、MySQL、小程序、Android、Uniapp等。

一、条件查询

条件查询(Condition Query)是一种在数据库查询中根据特定条件筛选数据的方法。在编程中,我们经常需要根据一些特定的条件来查询数据库中的记录。MyBatis-Plus 是一个 MyBatis 的增强工具,它提供了许多便捷的功能,包括条件查询。

在 MyBatis-Plus 中,条件查询可以通过以下几种方式实现。

1.1 使用 QueryWrapper

QueryWrapper 是 MyBatis-Plus 提供的一个查询条件封装类,可以方便地构建查询条件。通过链式调用方法,可以轻松地添加各种查询条件,如等于、不等于、大于、小于等。

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username", "张三").lt("age", 30);
List<User> users = userMapper.selectList(queryWrapper);

1.2 使用 LambdaQueryWrapper

LambdaQueryWrapper 是 QueryWrapper 的一个子类,它支持 Lambda 表达式,使得条件查询更加简洁。LambdaQueryWrapper 允许你直接使用实体类的字段名作为条件,而不需要使用字符串。

代码语言:javascript
复制
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getUsername, "张三").lt(User::getAge, 30);
List<User> users = userMapper.selectList(lambdaQueryWrapper);

1.3 使用 XML 映射文件

在 MyBatis 中,我们可以通过 XML 映射文件定义查询语句,并在 Mapper 接口中调用。MyBatis-Plus 也支持这种方式,你可以在 XML 文件中定义条件查询的 SQL 语句,然后在 Mapper 接口中使用。

代码语言:javascript
复制
<select id="selectByCondition" resultType="User">
  SELECT * FROM user WHERE username = #{username} AND age &lt; #{age}
</select>
代码语言:javascript
复制
public interface UserMapper extends BaseMapper<User> {
  List<User> selectByCondition(@Param("username") String username, @Param("age") Integer age);
}

1.4 使用 MyBatis 提供的动态 SQL

MyBatis 支持动态 SQL,可以根据条件动态地生成 SQL 语句。这种方式在 MyBatis-Plus 中同样适用。

代码语言:javascript
复制
<select id="selectByDynamicCondition" resultType="User">
  SELECT * FROM user
  <where>
    <if test="username != null and username.trim() != ''">
      AND username = #{username}
    </if>
    <if test="age != null">
      AND age &lt; #{age}
    </if>
  </where>
</select>

二、EntityWrapper和QueryWrapper

EntityWrapper和QueryWrapper是MyBatis-Plus框架中的两个核心组件,它们分别用于封装实体类和查询条件。

2.1 功能

  • EntityWrapper:用于封装实体类,它是一个通用的封装器,可以用于任何实体类。EntityWrapper提供了一些方法来设置实体类的属性值,例如:set、eq、ne等。
  • QueryWrapper:用于封装查询条件,它是一个查询条件的封装器。QueryWrapper提供了一些方法来设置查询条件,例如:eq、ne、gt、lt、like等。

2.2 使用场景

  • EntityWrapper:通常用于更新操作,例如:update、saveOrUpdate等。在这些操作中,EntityWrapper可以指定要更新的实体类属性和条件。
  • QueryWrapper:通常用于查询操作,例如:select、selectOne、selectList等。在这些操作中,QueryWrapper可以指定查询条件,如字段、排序、分组等。

2.3 条件表达式

  • EntityWrapper:主要关注实体类属性的设置,条件表达式较少。
  • QueryWrapper:提供了丰富的条件表达式,如:等于(eq)、不等于(ne)、大于(gt)、小于(lt)、模糊查询(like)等。

2.4 链式调用

EntityWrapper和QueryWrapper都支持链式调用,这使得代码更加简洁和易于阅读。

2.5 扩展性

EntityWrapper和QueryWrapper都可以通过自定义方法来扩展,以满足特定的需求。

2.6 总结

EntityWrapper和QueryWrapper在MyBatis-Plus框架中扮演着不同的角色。EntityWrapper主要用于封装实体类,而QueryWrapper主要用于封装查询条件。在实际开发中,根据操作类型(如查询或更新)选择合适的封装器。


三、常用方法

3.1 eq、ne (等于/不等于)

查询学号字段等于 学生3 的数据。

代码语言:javascript
复制
EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.eq("xuehao","学生3");
List<XueshengView> studentList = xueshengService.selectListView(ew);

查询学号字段不等于 学生3 的数据。

代码语言:javascript
复制
EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.ne("xuehao","学生3");
List<XueshengView> studentList = xueshengService.selectListView(ew);

3.2 le、lt、ge、gt(大于/小于)

代码语言:javascript
复制
EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.ge("xuehao","学生3");
List<XueshengView> studentList = xueshengService.selectListView(ew);

3.3 like、notLike、likeLeft、likeRight(模拟匹配)

代码语言:javascript
复制
EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.like("xuehao","学生3");
List<XueshengView> studentList = xueshengService.selectListView(ew);

3.4 in、notIn(联表查询)

代码语言:javascript
复制
EntityWrapper<TokenEntity> tokenEw = new EntityWrapper<>();
tokenEw.setSqlSelect("username");
List<TokenEntity> tokenEntities = tokenService.selectList(tokenEw);
String[] tokenArray = tokenEntities.stream().map(TokenEntity::getUsername).toArray(String[]::new);
String r = String.join(",", tokenArray);


EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.in("xuehao",r);
List<XueshengEntity> studentList = xueshengService.selectList(ew);

3.5 between、notBetween(区间查询)

代码语言:javascript
复制
EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.between("xuehao","a","b");
List<XueshengEntity> studentList = xueshengService.selectList(ew);

3.6 last(限制条数)

代码语言:javascript
复制
EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.last("limit 1");
XueshengEntity student = xueshengService.selectOne(ew);

3.7 orderAsc / orderDesc(排序)

代码语言:javascript
复制
EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.orderDesc(Arrays.asList("xuehao"));
List<XueshengEntity> studentList = xueshengService.selectList(ew);

3.8 and / or (多条件查询)

查询 id 大于 11 且学号为 456 结尾的学生。

代码语言:javascript
复制
SELECT * FROM xuesheng WHERE id > 11 AND (xuehao LIKE '%4' OR xuehao LIKE '%5' OR xuehao LIKE '%6');
代码语言:javascript
复制
EntityWrapper<XueshengEntity> ew = new EntityWrapper<>();
ew.gt("id",11).andNew()
        .like("xuehao","4").or().like("xuehao","5").or().like("xuehao","6");
List<XueshengEntity> studentList = xueshengService.selectList(ew);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、条件查询
    • 1.1 使用 QueryWrapper
      • 1.2 使用 LambdaQueryWrapper
        • 1.3 使用 XML 映射文件
          • 1.4 使用 MyBatis 提供的动态 SQL
          • 二、EntityWrapper和QueryWrapper
            • 2.1 功能
              • 2.2 使用场景
                • 2.3 条件表达式
                  • 2.4 链式调用
                    • 2.5 扩展性
                      • 2.6 总结
                      • 三、常用方法
                        • 3.1 eq、ne (等于/不等于)
                          • 3.2 le、lt、ge、gt(大于/小于)
                            • 3.3 like、notLike、likeLeft、likeRight(模拟匹配)
                              • 3.4 in、notIn(联表查询)
                                • 3.5 between、notBetween(区间查询)
                                  • 3.6 last(限制条数)
                                    • 3.7 orderAsc / orderDesc(排序)
                                      • 3.8 and / or (多条件查询)
                                      相关产品与服务
                                      云数据库 MySQL
                                      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档