Mybatis-Plus条件构造器QueryWrapper

Mybatis-Plus条件构造器QueryWrapper

1、条件构造器关系介绍

在这里插入图片描述

介绍 :

  • 上图绿色框为抽象类

  • 蓝色框为正常类,可创建对象

  • 黄色箭头指向为父子类关系,箭头指向为父类

wapper介绍 :

  • Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法

  • AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

  • AbstractLambdaWrapper : Lambda 语法使用 Wrapper 统一处理解析 lambda 获取 column

  • LambdaQueryWrapper :用于Lambda语法使用的查询 Wrapper

  • LambdaUpdateWrapper : Lambda 更新封装 Wrapper

  • QueryWrapper : Entity 对象封装操作类,不是用 lambda 语法

  • UpdateWrapper : Update 条件封装,用于 Entity 对象更新操作

解释:

在这里插入图片描述

2、构造器条件

package com.lqf.crud;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lqf.crud.bean.crm.User;
import com.lqf.crud.dao.crm.UserMapper;
import com.sun.org.apache.xerces.internal.util.EntityResolverWrapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.jsf.el.WebApplicationContextFacesELResolver;import javax.naming.Name;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest
public class QueryWrapperTests {@Autowiredprivate UserMapper mapper;/*** <p>* 根据根据entity条件,删除记录,QueryWrapper实体对象封装操作类(可以为 null)* 下方获取到queryWrapper后删除的查询条件为name字段为null的and年龄大于等于12的and email字段不为null的* 同理写法条件添加的方式就不做过多介绍了。* </p>*/@Testpublic void delete() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("name").ge("age", 12).isNotNull("email");int delete = mapper.delete(queryWrapper);System.out.println("delete return count = " + delete);}/*** <p>* 根据entity条件,查询一条记录,* 这里和上方删除构造条件一样,只是seletOne返回的是一条实体记录,当出现多条时会报错* </p>*/@Testpublic void selectOne() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "lqf");User user = mapper.selectOne(queryWrapper);System.out.println(user);}/*** <p>* 根据Wrapper条件,查询总记录数* </p>** @param queryWrapper 实体对象*/@Testpublic void selectCount() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "lqf");Integer count = mapper.selectCount(queryWrapper);System.out.println(count);}/*** <p>* 根据 entity 条件,查询全部记录* </p>** @param queryWrapper实体对象封装操作类(可以为null)为null查询全部*/@Testpublic void selectList() {List<User> list = mapper.selectList(null);System.out.println(list);}/*** <p>* 根据 Wrapper 条件,查询全部记录* </p>** @param queryWrapper 实体对象封装操作类(可以为 null)*/@Testpublic void selectMaps() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNotNull("name");List<Map<String, Object>> maps = mapper.selectMaps(queryWrapper);for (Map<String, Object> map : maps) {System.out.println(map);}}/*** 打印结果* {name=lqf, id=1046282328366391406, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391407, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391408, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391409, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391410, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391411, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391412, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391413, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391414, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391415, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391416, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391417, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391418, age=12, email=lqf@163.com, status=false}* json类型的键值对模式*//*** <p>* 根据 entity 条件,查询全部记录(并翻页)* </p>** @param page         分页查询条件(可以为 RowBounds.DEFAULT)* @param queryWrapper 实体对象封装操作类(可以为 null)*/@Testpublic void selectPage() {Page<User> page = new Page<>(1, 5);QueryWrapper<User> queryWrapper = new QueryWrapper<>();IPage<User> userIPage = mapper.selectPage(page, queryWrapper);System.out.println(userIPage);}/*** 打印结果* ==>  Preparing: SELECT COUNT(1) FROM user* ==> Parameters:* <==    Columns: COUNT(1)* <==        Row: 100* ==>  Preparing: SELECT id,name,age,email,status FROM user LIMIT 0,5* ==> Parameters:* <==    Columns: id, name, age, email, status* <==        Row: 1046282328366391319, lqf, 12, lqf@163.com, 0* <==        Row: 1046282328366391320, lqf, 12, lqf@163.com, 0* <==        Row: 1046282328366391321, lqf, 12, lqf@163.com, 0* <==        Row: 1046282328366391322, lqf, 12, lqf@163.com, 0* <==        Row: 1046282328366391323, lqf, 12, lqf@163.com, 0* <==      Total: 5*** 这里需要在项目中加入分页插件*   @Bean*     public PaginationInterceptor paginationInterceptor() {*         return new PaginationInterceptor();*     }*//*** <p>* 根据 Wrapper 条件,查询全部记录(并翻页)* </p>** @param page         分页查询条件* @param queryWrapper 实体对象封装操作类*/@Testpublic void selectMapsPage() {Page<User> page = new Page<>(1, 5);QueryWrapper<User> queryWrapper = new QueryWrapper<>();IPage<Map<String, Object>> mapIPage = mapper.selectMapsPage(page, queryWrapper);System.out.println(mapIPage);}/*** 和上个分页同理只是返回类型不同*//*** <p>* 根据 whereEntity 条件,更新记录* </p>** @param entity        实体对象 (set 条件值,不能为 null)* @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)*/@Testpublic void update() {//修改值User user = new User();user.setStatus(true);user.setName("zhangsan");//修改条件sUpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.eq("name", "lqf");int update = mapper.update(user, userUpdateWrapper);System.out.println(update);}/*** 打印结果* ==>  Preparing: UPDATE user SET name=?, status=? WHERE name = ?* ==> Parameters: zhangsan(String), true(Boolean), lqf(String)* <==    Updates: 100* Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@56a4f272]* 100* 2018-10-02 15:08:03.928  INFO 7972 --- [       Thread-2] o.s.w.c.s.GenericWebApplicationContext   : Closing org.springframework.web.context.support.GenericWebApplicationContext@37313c65: startup date [Tue Oct 02 15:08:00 CST 2018]; root of context hierarchy* 2018-10-02 15:08:03.937  INFO 7972 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...* 2018-10-02 15:08:04.053  INFO 7972 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.** Process finished with exit code 0*/}

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

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

相关文章

Hadoop-HDFS架构与设计

HDFS架构与设计 一、背景和起源二、HDFS概述1.设计原则1.1 硬件错误1.2 流水访问1.3 海量数据1.4 简单一致性模型1.5 移动计算而不是移动数据1.6 平台兼容性 2.HDFS适用场景3.HDFS不适用场景 三、HDFS架构图1.架构图2.Namenode3.Datanode 四、HDFS数据存储1.数据块存储2.副本机…

【Android】配置Gradle打包apk的环境

目录 生成jks签名文件 配置build.gradle&#xff08;app&#xff09; 打包 生成jks签名文件 Java 密钥库&#xff08;.jks 或 .keystore&#xff09;是用作证书和私钥存储库的二进制文件。用于为用户设备上安装的 APK 签名的密钥。 详细解释请看官方文档&#xff1a; 为应用…

11月15日星期三今日早报简报微语报早读

1、2023胡润女企业家榜出炉&#xff1a;郭得胜夫人邝肖卿首次成为中国女首富&#xff0c;龙湖吴亚军蝉联中国白手起家女首富&#xff1b; 2、叶剑英元帅夫人吴博逝世&#xff0c;享年106岁&#xff1b; 3、外交部&#xff1a;所谓“联合国军”是冷战产物&#xff0c;于法无据…

计算机毕设 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要…

【开源】基于Vue和SpringBoot的快乐贩卖馆管理系统

项目编号&#xff1a; S 064 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S064&#xff0c;文末获取源码。} 项目编号&#xff1a;S064&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视…

抖音短视频账号矩阵系统、短视频矩阵源码+无人直播源码开发可打包

抖音短视频账号矩阵系统、短视频矩阵源码无人直播源码开发可打包 矩阵系统源码主要有三种框架&#xff1a;Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架&#xff0c;提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框…

selenium报错:没有打开网页或selenium.common.exceptions.NoSuchDriverException

文章目录 问题解决方法 问题 当selenium的环境配置没有问题&#xff0c;但在使用selenium访问浏览器时并没有打开网页&#xff0c;或者出现selenium.common.exceptions.NoSuchDriverException报错信息&#xff08;如下图所示&#xff09;。 以上问题可能的原因是没有配置chrom…

第三天课程 RabbitMQ

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&am…

[云原生案例2.3 ] Kubernetes的部署安装 【多master集群架构高可用 ---- (二进制安装部署)】

文章目录 1. Kubernetes多Master集群高可用方案1.1 多节点Master高可用的实现过程1.2 实现高可用方法 2. 新Master节点的部署2.1 前置准备2.2 系统初始化操作2.2.1 关闭防火墙、selinux和swap分区2.2.2 修改主机名&#xff0c;添加域名映射2.2.3 修改内核参数2.2.4 时间同步 2.…

批量重命名软件推荐 A Better Finder Rename 12最新 for mac

A Better Finder Rename的大量重命名选项被组织成15个直观的类别&#xff0c;涵盖了一个伟大的文件重命名器所期望的所有文本&#xff0c;字符&#xff0c;位置&#xff0c;转换和截断功能。 除此之外&#xff0c;A Better Finder Rename提供了更多高级功能&#xff0c;可以满…

ATFX汇市:10月美国名义CPI年率大降,美元指数创近三月新低

ATFX汇市&#xff1a;据美国劳工部劳动统计局数据&#xff0c;美国10月未季调CPI年率最新值3.2%&#xff0c;低于前值3.7%&#xff0c;低于预期值3.3%&#xff1b;10月未季调核心CPI年率最新值4%&#xff0c;低于前置和预期值的4.1%。名义CPI与核心CPI双双下降&#xff0c;透露…

音频——解析 PCM 数据

文章目录 生成 PCM 数据16bit16bit mono16bit stereo16bit 4 channel16bit 8 channel24bit解析 PCM 数据多通道相同频率解析多通道不同频率解析程序源码生成 PCM 源码解析 PCM 源码生成 PCM 数据 对于多通道的 PCM 数据,其数据格式如下 ch0_data0 ch1_data0 ch2_data0 ch3_d…

目标检测—Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

目标检测概述 什么是目标检测&#xff1f; 滑动窗口&#xff08;Sliding Window&#xff09; 滑动窗口的效率问题和改进 滑动窗口的效率问题&#xff1a;计算成本很大 改进思路 1&#xff1a;使用启发式算法替换暴力遍历 例如 R-CNN&#xff0c;Fast R-CNN 中使用 Selectiv…

在 Electron上安装better-sqlite3出错

错误问题 一直卡npm install --global windows-build-tools --vs2015 这一步 解决 安装&#xff1a;pnpm install better-sqlite3 --save安装命令 pnpm i -D electron-rebuild 手动运行&#xff1a;node_modules/.bin/electron-rebuild -f -w better-sqlite3 我直接在packa…

Python武器库开发-flask篇之flask框架的安装(二十一)

Flask介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架&#xff0c;对于Werkzeug本质是Socket服务端&#xff0c;其用于接收http请求并对请求进行预处理&#xff0c;然后触发Flask框架&#xff0c;开发人员基于Flask框架提供的功能对请求进…

Stable Diffusion (version x.x) 文生图模型实践指南

前言&#xff1a;本篇博客记录使用Stable Diffusion模型进行推断时借鉴的相关资料和操作流程。 相关博客&#xff1a; 超详细&#xff01;DALL E 文生图模型实践指南 DALLE 2 文生图模型实践指南 目录 1. 环境搭建和预训练模型准备环境搭建预训练模型下载 2. 代码 1. 环境搭建…

redis基线检查

1、禁止使用 root 用户启动 | 访问控制 描述: 使用root权限来运行网络服务存在较大的风险。Nginx和Apache都有独立的work用户,而Redis没有。例如,Redis的Crackit漏洞就是利用root用户权限替换或增加authorize_keys,从而获取root登录权限。 加固建议: 使用root切换到re…

Docker - DockerFile

Docker - DockerFile DockerFile 描述 dockerfile 是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 编写一个dockerfile 文件docker build 构建成为一个镜像docker run 运行脚本docker push 发布镜像&#xff08;dockerhub&#xff0…

Kyligence 入选 Gartner® 2023 客户之声报告,高分获评“卓越表现者”

近日&#xff0c;Gartner 发布了最新的《2023 分析和商业智能平台“客户之声”报告》(Voice of the Customer for Analytics and Business Intelligence Platforms, 2023, October 2023)。跬智信息&#xff08;Kyligence&#xff09;成功入选该报告&#xff0c;并凭借 4.7 分&a…

每日一题----昂贵的婚礼

#include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <vector> using namespace std; //本题酋长的允诺也算一个物品,最后一定要交给酋长&#xff0c;那么等级不能超过酋长的等级范围const int N 150 * 15…