网上购物商城er图/宁波seo关键词如何优化

网上购物商城er图,宁波seo关键词如何优化,建设专业网站平台,网站建设需怎么做目录 1.wrapper介绍 2.QueryWrapper 2.1 例1:组转查询条件 Compare Nested Join Func 2.2 例2:组装排序条件 2.3 例3:组装删除条件 2.4 例4:条件的优先级 2.5 例5:组装select子句 2.6 例6:实现子查…

目录

1.wrapper介绍

2.QueryWrapper

2.1 例1:组转查询条件

Compare

Nested

Join

Func

 2.2 例2:组装排序条件

 2.3 例3:组装删除条件

 2.4 例4:条件的优先级

2.5 例5:组装select子句

 2.6 例6:实现子查询

3.UpdateWrapper

4.Condition

4.1 思路一

4.2 思路二:

5.LambdaQueryWrapper 

6.LambdaUpdateWrapper


1.wrapper介绍

Wrapper : 条件构造抽象类,最顶端父类

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

            QueryWrapper : 查询条件封装

            UpdateWrapper : Update 条件封装

            AbstractLambdaWrapper : 使用Lambda 语法

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

                     LambdaUpdateWrapper : Lambda 更新封装Wrapper

ctrl+h


2.QueryWrapper

2.1 例1:组转查询条件

/**** 按查询条件组装*/
@Test
public void test01(){QueryWrapper<People> queryWrapper=new QueryWrapper<>();//SELECT id,username AS name,age,email,is_deleted// FROM t_people// WHERE is_deleted=0 AND (username LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)queryWrapper.like("username","a").between("age",20,30).isNotNull("email");List<People> list=peopleMapper.selectList(queryWrapper);list.forEach(System.out::println);
}

QueryWrapper继承AbstractWrapper,我们点击AbstractWrapper进去看看。 

        我们能看到AbstrackWrapper实现了这四个接口。

Compare

  • 作用:用于构建比较条件,比如等于(eq)、不等于(ne)、大于(gt)、小于(lt)等条件。在构建 SQL 查询条件时,可用来描述实体属性和具体值之间的比较关系 。

Nested

  • 作用:用于构建嵌套查询条件,当需要在查询条件中添加括号包裹的子条件时会用到。可以让查询条件的逻辑结构更清晰,实现复杂的条件组合。

Join

  • 作用:主要用于处理 SQL 的连接操作,比如内连接(INNER JOIN)、左连接(LEFT JOIN)等。在多表查询场景下,通过它来定义表与表之间的连接关系。

Func

  • 作用:是一个函数式接口,通常用于封装一些可复用的条件构建逻辑。可以将条件构建的代码块作为参数传递,方便代码的复用和逻辑组织。

        我们能够看到,他们都是默认的方法, 继承他的类可以直接使用这个方法,也可以进行重写。同IService原码

 2.2 例2:组装排序条件

/**** 按排序组装*/
@Test
public void test02(){QueryWrapper<People> queryWrapper=new QueryWrapper<>();queryWrapper.orderByDesc("age").orderByAsc("id");List<People> list=peopleMapper.selectList(queryWrapper);list.forEach(System.out::println);
}

 2.3 例3:组装删除条件

/**** 组装删除条件*/
@Test
public void test03(){QueryWrapper<People> queryWrapper=new QueryWrapper<>();queryWrapper.isNull("email");int result=peopleMapper.delete(queryWrapper);System.out.println("受影响的行数:"+result);
}

 2.4 例4:条件的优先级

/**** 优先级*/
@Test
public void test04(){QueryWrapper<People> queryWrapper=new QueryWrapper<>();//UPDATE t_people SET age=?, email=? // WHERE is_deleted=0 AND (username LIKE ? AND age > ? OR email IS NULL)queryWrapper.like("username", "a").gt("age", 20).or().isNull("email");People people=new People();people.setAge(18);people.setEmail("people@qcby.com");int result=peopleMapper.update(people,queryWrapper);System.out.println("受影响的行数:" + result);
}

 lambda表达式里的逻辑优先算法

/**** lambda表达式里的逻辑优先算法*/
@Test
public void test05(){QueryWrapper<People> queryWrapper=new QueryWrapper<>();//UPDATE t_people SET age=?, email=?// WHERE is_deleted=0 AND (username LIKE ? AND (age > ? OR email IS NULL))queryWrapper.like("username",'a').and(i ->i.gt("age",20).or().isNull("email"));People people=new People();people.setAge(18);people.setEmail("people@qcby.com");int result=peopleMapper.update(people,queryWrapper);System.out.println("受影响的行数:" + result);
}

2.5 例5:组装select子句

/**** 组装select语句*/
@Test
public void test06(){//查询用户信息的username和age字段//SELECT username,age FROM t_peopleQueryWrapper<People> queryWrapper=new QueryWrapper<>();queryWrapper.select("username","age");//selectMaps()返回Map集合列表,通常配合select()使用,// 避免People对象中没有被查询到的列值 为nullList<Map<String,Object>> maps=peopleMapper.selectMaps(queryWrapper);maps.forEach(System.out::println);
}

 2.6 例6:实现子查询

/**** 实现子查询*/
@Test
public void test07(){//SELECT id,username AS name,age,email,is_deleted FROM t_people // WHERE is_deleted=0 AND (id IN (select id from t_people where id<=3))QueryWrapper<People> queryWrapper=new QueryWrapper<>();queryWrapper.inSql("id","select id from t_people where id<=3");List<People> list=peopleMapper.selectList(queryWrapper);list.forEach(System.out::println);
}


3.UpdateWrapper

/**** UpdateWrapper*/
@Test
public void test08(){//将(年龄大于20或邮箱为null)并且用户名中包含有a的用户信息修改//组装set子句以及修改条件UpdateWrapper<People> updateWrapper=new UpdateWrapper<>();//lambda表达式内的逻辑优先运算updateWrapper.set("age", 18).set("email", "user@qcby.com").like("username", "a").and(i -> i.gt("age", 20).or().isNull("email"));//UPDATE t_people SET age=?,email=?// WHERE is_deleted=0 AND// (username LIKE ? AND (age > ? OR email IS NULL))int result = peopleMapper.update(null, updateWrapper);System.out.println(result);
}

        Lambda 表达式是 Java 8 引入的一个新特性,它可以让你以更简洁的方式表示一个匿名函数。

        在这个例子中,i -> i.gt("age", 20).or().isNull("email") 表示一个接受一个参数 i,并对其进行一系列操作的函数。 

        参数 i 通常是 MyBatis-Plus 中的 QueryWrapper 或者 UpdateWrapper 对象,它们用于构建 SQL 查询或者更新语句的条件部分。


4.Condition

        在真正开发的过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因 此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若 没有选择则一定不能组装,以免影响SQL执行的结果

4.1 思路一

使用StringUtils的前提

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version>
</dependency>
@Test
public void test09(){//定义查询条件,有可能为null(用户未输入或未选择)String username=null;Integer ageBegin = 10;Integer ageEnd = 24;QueryWrapper<People> queryWrapper = new QueryWrapper<>();//StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成if(StringUtils.isNotBlank(username)){queryWrapper.like("username","a");}if(ageBegin != null){queryWrapper.ge("age", ageBegin);}if(ageEnd != null){queryWrapper.le("age", ageEnd);}//SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (age >= ? AND age <= ?)List<People> peoples = peopleMapper.selectList(queryWrapper);peoples.forEach(System.out::println);
}

4.2 思路二:

        上面的实现方案没有问题,但是代码比较复杂,我们可以使用带condition参数的重载方法构建查 询条件,简化代码的编写

@Test
public void test09UseCondition(){//定义查询条件,有可能为null(用户未输入或未选择)String username = null;Integer ageBegin = 10;Integer ageEnd = 24;QueryWrapper<People> queryWrapper = new QueryWrapper<>();
//StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成queryWrapper.like(StringUtils.isNotBlank(username), "username", "a").ge(ageBegin != null, "age", ageBegin).le(ageEnd != null, "age", ageEnd);
//SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (age >= ? AND age <= ?)List<People> peoples = peopleMapper.selectList(queryWrapper);peoples.forEach(System.out::println);
}


5.LambdaQueryWrapper 

 

    /**** LambdaQueryWrapper*/@Testpublic void test10() {
//定义查询条件,有可能为null(用户未输入)String username = "a";Integer ageBegin = 10;Integer ageEnd = 24;LambdaQueryWrapper<People> queryWrapper = new LambdaQueryWrapper<>();
//避免使用字符串表示字段,防止运行时错误queryWrapper.like(StringUtils.isNotBlank(username), People::getName, username).ge(ageBegin != null, People::getAge, ageBegin).le(ageEnd != null, People::getAge, ageEnd);//SELECT id,username AS name,age,email,is_deleted FROM t_people // WHERE is_deleted=0 AND (username LIKE ? AND age >= ? AND age <= ?)List<People> peoples = peopleMapper.selectList(queryWrapper);peoples.forEach(System.out::println);}

        在 Java 里,People::getAge 属于方法引用的一种形式。方法引用是 Java 8 引入的特性,它能够让你直接引用已有的方法,而无需显式调用该方法。一般用于 Lambda 表达式能使用的地方,从而让代码更简洁。 


6.LambdaUpdateWrapper

/**** 使用LambdaUpdateWrapper*/
@Test
public void test11(){LambdaUpdateWrapper<People> updateWrapper=new LambdaUpdateWrapper<>();//UPDATE t_people SET age=?, age=?,email=? WHERE is_deleted=0 AND (username LIKE ? AND (age < ? OR email IS NULL))updateWrapper.set(People::getAge,18).set(People::getEmail,"people@qcby.com").like(People::getName,"a").and(i ->i.lt(People::getAge,24).or().isNull(People::getEmail));//lambda 表达式内的逻辑优先运算People people=new People();int result=peopleMapper.update(people,updateWrapper);System.out.println("受影响的行数:" + result);
}

 

 

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

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

相关文章

计算机视觉算法实战——手术导航:技术、应用与未来

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 手术导航中的计算机视觉&#xff1a;领域介绍 计算机视觉在手术导航领域的应用代表了现代医学与人工智…

【科研绘图系列】R语言绘制PCA与变量的相关性散点图(scatter plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据画图输出图片系统信息介绍 【科研绘图系列】R语言绘制PCA与变量的相关性散点图(scatter plot) 加载R包 library(tidyverse) library(ggpubr)数据下载 …

深度解析Spring Boot可执行JAR的构建与启动机制

一、Spring Boot应用打包架构演进 1.1 传统JAR包与Fat JAR对比 传统Java应用的JAR包在依赖管理上存在明显短板&#xff0c;依赖项需要单独配置classpath。Spring Boot创新的Fat JAR&#xff08;又称Uber JAR&#xff09;解决方案通过spring-boot-maven-plugin插件实现了"…

安科瑞微电网能量管理控制箱,光伏发电的守护者

安科瑞顾强 随着工业的发展&#xff0c;很多用电设备和工厂设备采用直流系统供电&#xff0c;直流系统的正极和负极不接地。对于不接地&#xff08;IT&#xff09;配电系统&#xff0c;应该进行绝缘电阻的监控以保证供电系统的安全运行。 AIM-D100-TS 系列直流绝缘监测仪可以…

[计算机网络]网络I/O模型

欢迎来到啾啾的博客&#x1f431;。 这是一个致力于构建完善的Java程序员知识体系的博客&#x1f4da;&#xff0c;记录学习的点滴&#xff0c;分享工作的思考、实用的技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。…

Vue中使用JsonView进行JSON数据展示

前言 最近在开发公司的管理系统的操作日志模块&#xff0c;要查看某条操作日志的请求参数&#xff0c;要将请求的参数以 JSON 格式的形式展示出来&#xff0c;于是用到了Vue-JSON-Viewer 这个插件。 一、Vue-JSON-Viewer 基础入门 插件简介 Vue-JSON-Viewer 是一个用于在Vue项…

vue vue3 走马灯Carousel

背景&#xff1a; 在项目中需要展示多张图片&#xff0c;但在页面上只有一张图片的有限位置&#xff0c;此时考虑使用轮播图实现多张图片的展示。element组件官网有走马灯Carousel的组件详细介绍。 实现效果&#xff1a; 官网链接&#xff1a;点击跳转 核心代码&#xff1a; …

重学vue3(三):vue3基本语法及使用

组合式 API是vue3 的核心特性&#xff0c;替代 Vue2 的选项式 API&#xff0c;强调逻辑复用和代码组织。基本语法如下&#xff1a; <script setup> import { ref, reactive, computed, onMounted } from vue;// 1. 响应式数据 const count ref(0); // 基本类…

TDengine 3.3.2.0 集群报错 Post “http://buildkitsandbox:6041/rest/sql“

原因&#xff1a; 初始化时处于内网环境下&#xff0c;Post “http://buildkitsandbox:6041/rest/sql“ 无法访问 修复&#xff1a; vi /etc/hosts将buildkitsandbox映射为本机节点 外网环境下初始化时没有该问题

深度解析 BPaaS:架构、原则与研发模式探索

在当今复杂多变的业务环境下&#xff0c;软件开发面临着诸多挑战&#xff0c;如何有效地管理业务复杂性并实现系统的可扩展性成为关键。BPaaS应运而生&#xff0c;它作为一种创新的理念和架构模式&#xff0c;改变着企业研发的方式。本文将深入探讨 BPaaS 是什么&#xff0c;以…

如何在linux中部署dns服务 主备dns (详细全过程)

环境centos 7.9 主DNS&#xff1a;192.168.60.131 备DNS&#xff1a;192.168.60.134 我以 chenxingyu0.com 指向 192.168.60.200为例 首先是主dns #!/bin/bash# 检查是否为 root 用户 if [ "$(id -u)" ! "0" ]; thenecho "请使用…

操作系统导论——第13章 抽象:地址空间

一、早期系统 从内存来看&#xff0c;早期的机器并没有提供多少抽象给用户。基本上&#xff0c;机器的物理内存如图13.1所示 操作系统曾经是一组函数&#xff08;实际上是一个库&#xff09;&#xff0c;在内存中&#xff08;在本例中&#xff0c;从物理地址0开始&#xff09;&…

Axure RP 9.0教程: 基于动态面板的元件跟随来实现【音量滑块】

文章目录 引言I 音量滑块的实现步骤添加底层边框添加覆盖层基于覆盖层创建动态面板添加滑块按钮设置滑块拖动效果引言 音量滑块在播放器类APP应用场景相对较广,例如调节视频的亮度、声音等等。 I 音量滑块的实现步骤 添加底层边框 在画布中添加一个矩形框:500 x 32,圆…

网络基础-路由器和交换机工作配置

三、路由器和交换机的工作原理配置以及华为体系下的小型网络的搭建 3.1路由基础 3.1.1数据转发 通过链路层交换机和网络层路由器进行数据转发 交换机&#xff08;链路层&#xff09;mac地址表的数据转发路由器&#xff08;网络层&#xff09; ip路由表的数据转发 隔离广播域…

爱普生SG-3031CMA有源晶振在汽车雷达中的应用

随着自动驾驶技术的普及&#xff0c;汽车雷达已成为高级驾驶辅助系统&#xff08;ADAS&#xff09;和自动驾驶系统的核心感知组件。雷达模块需要精确的时钟信号来确保发射/接收时序的准确性、信号处理的同步性以及低功耗运行。这些系统对时钟信号的稳定性、抗干扰性及环境适应性…

案例实践 | 招商局集团以长安链构建“基于DID的航运贸易数据资产目录链”

概览 案例名称 基于DID的航运贸易数据资产目录链 业主单位 招商局集团 上线时间 2024年10月 用户群体 供数用数企业和个人 用户规模 集团内20企业 案例背景 招商局集团深入落实“促进数据高效流通使用、赋能实体经济”精神&#xff0c;深化集团数字化水平&#xff0c…

【docker】docker-compose安装RabbitMQ

docker-compose安装RabbitMQ 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09;2、启动mq3、访问mq4、查看服务器映射目录5、踩坑5.1、权限不足 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09; versi…

Maven工具学习使用(二)——Maven基础用法

pom常见属性说明 详细见官方文档说明 https://maven.apache.org/ref/3.8.6/maven-model/maven.html#class_releases <modelVersion>4.0.0</modelVersion> POM模型的版本 <groupId>org.apache.maven.plugins</groupId> 项目属于哪个组&#xff…

蓝桥杯高频考点——二分(含C++源码)

二分 基本框架整数查找&#xff08;序列二分的模版题 建议先做&#xff09;满分代码及思路solution 子串简写满分代码及思路solution 1&#xff08;暴力 模拟双指针70分&#xff09;solution 2&#xff08;二分 AC&#xff09; 管道满分代码及思路样例解释与思路分析solution 最…

鸿蒙开发之ArkTS联合类型

在鸿蒙开发中&#xff0c;ArkTS是一种基于TypeScript的编程语言&#xff0c;专为鸿蒙应用开发而设计。联合类型&#xff08;Union Types&#xff09;在ArkTS中是一个重要的概念&#xff0c;它允许一个变量存储多种类型的数据&#xff0c;从而增加了代码的灵活性&#xff0c;同时…