SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

SpringBoot

【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

SpringBoot 基础篇

文章目录

*

+ SpringBoot
+ SpringBoot 基础篇
+ 4 基于 SpringBoot 的SSMP 整合案例
+
* 4.7 数据层标准开发【条件查询】
*
4.7.1 实现条件查询
4.7.2 小结

4 基于 SpringBoot 的SSMP 整合案例

4.7 数据层标准开发【条件查询】

4.7.1 实现条件查询

【其实这个内容在Mybatis-Plus 的章节已经学过了】

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

在我们之前查询全部的时候,设置的那个null 参数其实本身就是用来进行条件查询的。

试试

@Test
void testBy(){

    QueryWrapper<Book> queryWrapper = new QueryWrapper<>();

    queryWrapper.like("name","Spring");
    bookDao.selectList(queryWrapper);
}

测试结果

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

这就查询到了所有name 中包含Spring 字符串的记录。

当然还有很多条件书写方法,可以参考官网:
https://baomidou.com/pages/10c804/

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

当然这样子写有个问题,字段名是我们自己写的,万一写错了、记错了,就会出错了

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

所以这种方式不是很推荐

除了QueryWrapper , 还有个对象叫 LambdaQueryWrapper

试试

@Test
void testBy2(){
    LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.like(Book::getName,"Spring");

    bookDao.selectList(queryWrapper);
}

测试结果

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

使用这个对象,那就想写错的机会都没了【安全性也高了】

但是新问题又来了,

如果我那个条件没有,就前端给我传来一个null,会是什么情况?

试试

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

条件为null,本意应该是没有设置条件,即应该查出所有数据,但是现在直接变成null 字符串进行拼接了,这很明显是有问题的。

两种解决办法:

① 传统解决办法 if 判断

@Test
void testBy2(){
    String name = null;
    LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<>();
    if (name != null){
        queryWrapper.like(Book::getName,name);
    }
    bookDao.selectList(queryWrapper);
}

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

这种方式就老掉牙了

② 其实like这种条件前面还可以有一个参数

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

如果是真,加上这个条件,如果为假,不加这个条件

    @Test
    void testBy2(){
        String name = null;
        LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<>();

        queryWrapper.like(name != null ,Book::getName , name);
        bookDao.selectList(queryWrapper);
    }

测试结果

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

不为空

SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

没毛病【即没传值我就不连,传了值我就连】

小结一下

  • 使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用
@Test
void testGetByCondition(){
IPage page = new Page(1,10);
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
lqw.like(Book::getName,"Spring");
bookDao.selectPage(page,lqw);
}
@Test
void testGetByCondition(){
QueryWrapper<Book> qw = new QueryWrapper<Book>();
qw.like("name","Spring");
bookDao.selectList(qw);
}
  • 支持动态拼写查询条件
@Test
void testGetByCondition(){
String name = "Spring";
IPage page = new Page(1,10);
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
lqw.like(Strings.isNotEmpty(name),Book::getName,"Spring");
bookDao.selectPage(page,lqw);
}
4.7.2 小结
  1. 使用QueryWrapper对象封装查询条件
  2. 推荐使用LambdaQueryWrapper对象
  3. 所有查询操作封装成方法调用
  4. 查询条件支持动态条件拼装

Original: https://blog.csdn.net/weixin_44226181/article/details/127816952
Author: Ding Jiaxiong
Title: SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.7 数据层标准开发【条件查询】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/654670/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球