MyBatisPlus3-条件查询和映射问题(字段、表名)

news2024/11/26 14:46:09

1. 条件查询三种方式

在这里插入图片描述

条件查询多用第三种;
链式写表示且的关系,中间加上or()表示或的关系;
给出相应示例代码:

@Test
public void testGetList(){
	//方式一:按条件查询
	/*QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();*/
	/*userQueryWrapper.lt("age", 18);*/
	/*List<User> users = userDao.selectList(userQueryWrapper);*/
	/*System.out.println(users);*/
	
	//方式二:lambda格式按条件查询
	/*QueryWrapper<User> userQueryWrapper = new QueryWrapper<User>();*/
	/*userQueryWrapper.lambda().lt(User::getAge, 18);*/
	/*List<User> users = userDao.selectList(userQueryWrapper);*/
	/*System.out.println(users);*/
	
	//方式三:lambda格式按条件查询
	/*LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();*/
	/*userLambdaQueryWrapper.lt(User::getAge, 18);*/
	/*List<User> users = userDao.selectList(userLambdaQueryWrapper);*/
	/*System.out.println(users);*/
	
	//并且与或者关系
	LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
	//且的关系
	//userLambdaQueryWrapper.gt(User::getAge, 18).lt(User::getAge, 30);
	//或的关系
	userLambdaQueryWrapper.lt(User::getAge, 18).or().gt(User::getAge, 30);
	List<User> users = userDao.selectList(userLambdaQueryWrapper);
	System.out.println(users);
}

2. 条件查询的null值处理

lt()和gt()中做对应的判断,判断条件是否为null

//null值处理,业务场景中只有下限(或上限)条件时
UserQuery userQuery = new UserQuery();
userQuery.setAge(50);
//userQuery.setAge2(20);

LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
userLambdaQueryWrapper.lt(null != userQuery.getAge(), User::getAge, userQuery.getAge());
userLambdaQueryWrapper.gt(null != userQuery.getAge2(), User::getAge, userQuery.getAge2());
List<User> users = userDao.selectList(userLambdaQueryWrapper);
System.out.println(users);

也可以采用链式写法(阅读性差)

userLambdaQueryWrapper.lt(null != userQuery.getAge(), User::getAge, userQuery.getAge())
		              .gt(null != userQuery.getAge2(), User::getAge, userQuery.getAge2());

3. 查询投影

查询投影指的是从查询结果中选择需要的列或字段进行筛选,只返回这些特定的列或字段信息。这种方式可以使查询结果更简洁,且只包含所需的信息。

查询部分字段

//查询投影
LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<User>();
//1.Lambda方式
userLambdaQueryWrapper.select(User::getId, User::getName);

//2.字段形式
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.select("id", "name");

List<User> users = userDao.selectList(userLambdaQueryWrapper);
List<User> users1 = userDao.selectList(userQueryWrapper);
System.out.println(users);
System.out.println(users1);

查询结果包括模型类中未定义的属性

QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.select("count(*) as count, tel");
userQueryWrapper.groupBy("tel");

List<Map<String, Object>> userList = userDao.selectMaps(userQueryWrapper);
System.out.println(userList);

4. 查询条件设置

等同于=的登录验证,查询一条使用selectOne()

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//等同于=
lqw.eq(User::getName,"Jerry").eq(User::getPassword,"jerry");
User loginUser = userDao.selectOne(lqw);
System.out.println(loginUser);

范围查询

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//范围查询 lt le gt ge eq between
lqw.between(User::getAge,10,30);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);

模糊查询,likeLeft表示%J,likeRight表示J%,like表示%J%

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//模糊匹配 like
lqw.likeLeft(User::getName,"J");
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);

5. 字段映射与表名映射

与之前的MyBatis中写xml文件时,采用resultMap的功能类似

  1. 属性名与数据库中的属性名不对应
  1. 编码中添加了数据库中未定义的属性,怎么避免sql报错
  1. 采用默认查询开放了更多的字段查询权限,这时需要隐藏一些字段的查询(password)
  1. 表名与编码开发设计不同步
@Data
//设置类名与数据库表名的映射(4)
@TableName("tbl_user")
public class User {
    private Long id;
    private String name;
    //属性名与数据库中的属性名不对应(1),隐藏一些字段的查询(3)
    @TableField(value = "pwd",select = false)
    private String password;
    private Integer age;
    private String tel;
    //设置数据库未定义的属性(2)
    @TableField(exist = false)
    private Integer online;
}

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

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

相关文章

基于WebGL的智慧化工三维可视化管理系统

前言 作为全球化学品第一生产大国&#xff0c;我国危险化学品规模总量大、涉及品种多、应用范围广、管理链条长、安全风险高&#xff0c;历来是防范化解重大安全风险的重点领域。 危险化学品领域频繁发生的典型事故&#xff0c;暴露出传统安全风险管控手段问题突出。 建设背景…

【裸机驱动LED】使用汇编代码驱动LED(一)—— 寄存器解析篇

为了后续使用C语言驱动LED&#xff0c;事先学习汇编代码驱动LED&#xff0c;有如下好处&#xff1a; 熟悉一些基本的汇编语法了解驱动LED的基本流程了解驱动LED需要用到哪些寄存器作为一个初学者&#xff0c;可以锻炼自己阅读开发文档的能力 本文的主要目的是了解驱动LED的基…

【手撕Spring源码】SpringBoot启动过程中发生了什么?

文章目录 SpringBoot启动过程启动详解启动演示启动过程总结 SpringBoot启动过程 启动详解 SpringBoot的启动分为两个部分&#xff1a; 构造SpringApplication执行run方法 接下来我们先来看看构造方法里面都做了什么事情。 第一步&#xff1a;记录 BeanDefinition 源 大家知…

Jenkins配置邮件通知+钉钉通知,任务构建状态随时掌握

1.前言 Hello&#xff0c;各位小伙伴&#xff0c;大家好&#xff01;&#xff01;&#xff01; 在前面的文章中&#xff0c;我们实现了用Maven项目任务和Pipeline流水线任务来完成对项目的自动化部署。 DockerJenkinsGitee自动化部署maven项目 DockerJenkinsGiteePipeline部…

0001欧几里得算法

首先我们先了解欧几里得这个人。俗话说&#xff1a;不了解一个人&#xff0c;很难走进他的思想。欧几里得是约公元前330年~公元前275年的古希腊数学家&#xff0c;被称为“几何之父”。《几何原本》就是他的著作。而欧几里得算法是《几何原本》中的一个用于求两个数的最大公约数…

以AI为灯,照亮医疗放射防护监管盲区

相信绝大部分人都有在医院拍X光片的经历&#xff0c;它能够让医生更方便快速地找出潜在问题&#xff0c;判断病人健康状况&#xff0c;是医疗诊断过程中的常见检查方式。但同时X射线也是一把双刃剑&#xff0c;它的照射量可在体内累积&#xff0c;对人体血液白细胞有杀伤力&…

mysql加索引,数据库卡死

公司的一个内部项目&#xff0c;由于突然导入了几十万的数据&#xff0c;数据量翻了一倍&#xff0c;导致了某个页面打开很慢。通过sql日志看到主要是由于慢查询引起的&#xff0c;通过explain这个sql&#xff0c;发现主要是由于这个SQL没有命中索引&#xff0c;进行了全表扫描…

原型模式的用法

文章目录 一、原型模式的用法1.1 介绍1.2 结构1.3 原型模式类图1.4 实现1.4.1 克隆的分类1.4.2 代码 1.5 "三好学生"奖状案例1.5.1 "三好学生"奖状类图1.5.2 代码 1.6 深、浅克隆的区分1.6.1 浅克隆1.6.2 深克隆 一、原型模式的用法 1.1 介绍 用一个已经…

STL(结)

STL&#xff08;结&#xff09; map存储结构基本操作equal_range遍历方式 插入 multimapsetunordered_mapmap和无序map的异同mapunordered_map map 存储结构 map容器的底层存储是一个红黑树&#xff0c;遍历方式都是按照中序遍历的方式进行的。 int main() {std::map<int…

数组降维

写一个函数&#xff0c;打印数组内的内容&#xff0c;代码为&#xff1a; #include<stdio.h>void show_arr(int arr[], int num) {int i 0;for (i 0; i < num; i){printf("%d ", arr[i]);}printf("\n"); } int main() {int arr[] { 1,2,3,4,5…

Servlet Cookie基本概念和使用方法

目录 Cookie 介绍 Cookie 主要有两种类型&#xff1a;会话 Cookie 和持久 Cookie。 Cookie使用步骤 使用Servlet和Cookie实现客户端存储的登录功能示例&#xff1a; LoginServlet类 index.jsp 删除Cookie 浏览器中查看Cookie的方法 Cookie 介绍 Cookie 是一种在网站和…

win10下载安装mysql8.0版本

打开官网下载&#xff1a;https://dev.mysql.com/downloads/mysql/ 下载完成后解压&#xff0c;这里我是直接放在C盘 然后打开mysql目录文件夹新建my.ini文件,my.ini文件内容如下&#xff0c;需要修改两个地方&#xff0c;其中datadir你自己的mysql的安装目录&#xff0c;data…

如何在线压缩png图片?png压缩图片大小的方法介绍

压缩PNG图片大小的优点 随着数字化时代的发展&#xff0c;PNG格式已成为一种常见的图片格式。然而&#xff0c;由于高分辨率、高色深等原因&#xff0c;PNG图片通常具有较大的文件体积&#xff0c;导致在传输、存储和网页加载等方面会产生不必要的负担。因此&#xff0c;对于需…

ai绘画生成古风场景怎么弄?告诉你怎么ai绘画

随着人工智能技术的不断发展&#xff0c;ai绘画已经成为一个令人着迷的领域。一些软件利用深度学习算法和生成对抗网络等技术&#xff0c;能够帮助艺术家和爱好者创造出令人惊叹的艺术作品。今天我就来跟大家分享一下如何一键ai绘画&#xff0c;感兴趣的朋友就跟我一起看下去吧…

《文体用品与科技》期刊简介及投稿要求

《文体用品与科技》期刊简介&#xff1a; 主管单位&#xff1a;中国轻工业联合会 主办单位&#xff1a;中国文教体育用品协会、全国文教体育用品信息中心、北京市文教体育用品研究所 国际刊号&#xff1a; ISSN1006-8902 国内刊号;CN:11-3762/TS 邮发代号;82-21932 发表周…

DDR跑不到速率后续来了,相邻层串扰深度分析!

高速先生成员&#xff1a;黄刚 就在刚刚&#xff0c;雷豹把他对叠层的调整方式和改善后的仿真结果给师傅Chris看完后&#xff0c;Chris给雷豹点了个大大的赞&#xff0c;因为优化的方式其实不需要大改DDR的走线&#xff0c;只需要把相邻层的信号最大限度的拉开&#xff0c;同时…

如何定位分析视频异常画面

背景 视频典型画面不正常主要包含画面卡顿、画面模糊、画面不显示、画面花屏这 4 类问题。本文主要介绍的是画面花屏的情况&#xff0c;这里的画面花屏包含了花屏、闪屏、绿屏、黑屏。视频花屏是多媒体工程师最常见的问题之一&#xff0c;也是最棘手的问题之一&#xff0c;笔者…

有什么可靠稳定的微信管理系统?

微信管理系统是什么 微信管理系统从字面上来说可以理解为微信的管理和营销系统。通俗一点来说就是利用微信与管理营销相结合的一种新型办公方式。 不用下载任何软件&#xff0c;不用多部手机&#xff0c;对手机没有任何型号要求&#xff0c;不需要刷机、越狱&#xff0c;不需…

政务APP小程序开发 畅享全新政府办事体验

现在很多政府机构打着便民的口号&#xff0c;但其实生活中很多时候去政府机构办事都很费时间&#xff0c;周末节假日不上班没法办理&#xff0c;工作日去人多排长队不说&#xff0c;往往排到自己了又因为资料不全、手续不齐&#xff0c;无法证明自己等奇葩原因不得不一次次被拒…

boost 搜索引擎

boost搜索引擎 01 项目演示 done 02 讲解思路 03 项目背景 公司&#xff1a;百度、搜狗、360搜索、头条新闻客户端 - 我们自己实现是不可能的&#xff01; 站内搜索&#xff1a;搜索的数据更垂直&#xff0c;数据量其实更小 boost的官网是没有站内搜索的&#xff0c;需要…