当前位置: 首页 > news >正文

MyBatis与SQL实用技巧 实用语法

数据库SQL技巧

数值转字符

<select id="getMaterialsList" resultType="java.util.Map">selectmaterial_id materialId,material_name materialName,unit,
specification,
CONVERT(unit_price,CHAR) unitPricefrom trace_agriculture_materialwhere tenant_id = #{tenantId}and organize_code =#{organizeCode}</select>

数据库中unit_price字段类型为decimal(10,2)
展示在前端使用字符串即可,所以使用CONVERT(unit_price,CHAR)将数据库中的decimal精确数值类型转变为字符型,这样前端将字符串展示出来即可。

日期格式化

DATE_FORMAT(ate.plant_end_time,‘%Y-%m-%d’) plantEndTime
这句话是MySQL中的一个DATE_FORMAT函数,它用于将日期时间字段按照指定的格式进行格式化。
在这个例子中,ate.plant_end_time是一个日期时间字段,而’%Y-%m-%d’是你希望将其格式化的格式。DATE_FORMAT函数会将ate.plant_end_time字段的值转换为指定的格式,并将结果命名为plantEndTime。
具体来说,%Y代表四位数的年份,%m代表两位数的月份,%d代表两位数的日期。所以,'%Y-%m-%d’就代表将日期时间格式化为"YYYY-MM-DD"的格式。
举个例子,如果ate.plant_end_time字段的值是"2023-07-19 15:30:00",那么DATE_FORMAT函数就会返回"2023-07-19",并命名为plantEndTime。

"2023~07~19 15:30:00" DATE_FORMAT(your_date_column, '%Y~%m~%d %H:%i:%s')

时间作为过滤条件

select * from demo where createTime between '2018-12-12' and '2018-12-12'

注意这样几乎查不到任何数据,除非时间刚好等于’2018-12-12 00:00:00’
是由于时间精度引起的问题,createTime是精确到时分秒的,但是我们给出的过滤条件只精确到了天,所以在过滤的时候默认认为都是 "00:00:00”
也就相当于select * from demo where createTime between ‘2018-12-12 00:00:00’ and ‘2018-12-12 00:00:00’
可以改为select * from demo where createTime between ‘2018-12-12’ and ‘2018-12-13’
也就是后面的日期加一天
或者是将时间精确到时分秒
mybatis中有如下两种写法:

select * from demo where createTime between CONCAT(#{createTime},' 00:00:00') and CONCAT(#{createTime},' 23:59:59')
select * from demo where createTime between #{createTime and date_add(#{createTime}, INTERVAL 1 day)

数值四舍五入保留2位小数

ROUND(xx, 2) 可以将xx四舍五入保留2位小数
取一个不为null的值
SELECT IFNULL(SUM(TOTAL_WEIGHT),0) as TOTAL_WEIGHT FROM
其中IFNULL(SUM(TOTAL_WEIGHT),0)是取第一个不为null的值,也就是说我们希望查询不到的时候和为0,这样才符合逻辑

条件转换子语句

SELECT employee_name, position, experience,  CASE  WHEN position = 'Manager' AND experience >= 5 THEN 5000  WHEN position = 'Assistant Manager' AND experience >= 3 THEN 4000  ELSE 3000  END AS salary  
FROM employee_table;

员工工资计算:在一个公司中,根据员工的职位和工作经验,工资可能有所不同。你可以使用CASE语句根据职位和工作经验计算员工的工资。

left join

左连接返回左表中的所有行,即使右表中没有匹配的行。它能够查询出左表的所有记录,如果在右表中没有匹配项,则对应的结果字段为NULL。换句话说,左连接是基于左表的每一行,查找右表是否有匹配的行,如果有,则返回匹配的结果,如果没有,则返回NULL。

例如,考虑以下使用场景:一个电子商务网站有用户表(users)和订单表(orders)。用户表存储了所有用户的信息,订单表存储了每个用户的订单信息。现在需要查询所有用户及其对应的订单信息。在这个场景中,可以使用左连接来查询用户表中的所有用户以及他们的订单信息,即使有些用户没有订单。

以下是左连接的使用案例:
SELECT users.id, users.name, orders.order_id, orders.order_date
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

inner join

内连接(inner join)是基于两个表的连接谓词,将两个表的列组合到一起产生新的结果表。只有当至少有一个匹配时,内连接才会返回行。换句话说,内连接只会返回两个表中都存在的匹配行。
内连接的应用场景主要是在需要查询两个或多个表中共有的数据时。例如,假设有两个表,一个是学生表,一个是课程表,它们之间有一个成绩表,需要查询每个学生的成绩,那么就需要使用内连接。
以下是内连接的使用案例:
SELECT students.name, grades.subject, grades.grade
FROM students
INNER JOIN grades ON students.student_id = grades.student_id;
在这个查询中,我们使用了学生表(students)和成绩表(grades)进行内连接,连接条件是两个表中的学生ID(student_id)相等。通过这个查询,我们可以获取每个学生的姓名、科目和成绩。

MyBatis技巧

更新操作

UPDATE user_table user_name = #{user_name}, user_age = #{user_age}, user_email = #{user_email} WHERE id = #{id} 标签在 MyBatis 中常用于动态 SQL 语句的拼接,可以用于处理 null 值和生成不同的 SQL 语句。prefix="SET" 表示生成的 SQL 语句前缀为 "SET",而 suffixOverrides="," 表示生成的 SQL 语句结尾不包含逗号。 在这个 标签内部,可以放置多个 标签来判断相应的条件,根据条件的结果来动态生成 SQL 语句。如果条件判断为 true,则会将对应的列和值拼接到 SQL 语句中。 ## 查询中字段为空的校验 and tenant_id = #{tenantId} 注意这里的写法 不等于null 不等于空字符串

相关文章:

MyBatis与SQL实用技巧 实用语法

数据库SQL技巧 数值转字符 <select id"getMaterialsList" resultType"java.util.Map">selectmaterial_id materialId,material_name materialName,unit, specification, CONVERT(unit_price,CHAR) unitPricefrom trace_agriculture_materialwhere …...

更好的理解c++中的虚函数和静态多态以及动态多态

1.虚函数&#xff08;Virtual Function&#xff09; 在c 中&#xff0c; 虚函数是定义在基类中的函数&#xff0c;但是它可以在派生类中进行重写&#xff08;Override) 。 通过在基类中通过virtual 关键字声明函数 &#xff0c; 你创建了一个可以在任何派生类中特别实现的接口…...

MybatisPlus之新增操作并返回主键ID

在应用mybatisplus持久层框架的项目中&#xff0c;经常遇到执行新增操作后需要获取主键ID的场景&#xff0c;下面将分析及测试过程记录分享出来。 1、MybatisPlus新增方法 持久层新增方法源码如下&#xff1a; public interface BaseMapper<T> extends Mapper<T> …...

工程(十四)——ubuntu20.04 PL-VINS

博主创建了一个科研互助群Q&#xff1a;772356582&#xff0c;欢迎大家加入讨论。这是一个科研互助群&#xff0c;主要围绕机器人&#xff0c;无人驾驶&#xff0c;无人机方面的感知定位&#xff0c;决策规划&#xff0c;以及论文发表经验&#xff0c;以方便大家很好很快的科研…...

C复习-结构struct+bit field+union

参考&#xff1a; 里科《C和指针》 结构的声明 struct {int a;char b; } x; struct {int a;char b; } y[20], *z;// 会报错&#xff0c;因为z和x虽然都没有名字&#xff0c;但是并不是一个东西 z &x;struct SIMPLE {int a;char b; }; // 这样就对了&#xff0c;因为名字匹…...

1 快速了解Paimon数据湖核心原理及架构

1.1 什么是Apache Paimon Apache Paimon的前身属于Flink的子项目&#xff1a;Flink Table Store。 目前业内主流的数据湖存储项目都是面向批处理场景设计的&#xff0c;在数据更新处理时效上无法满足流式数据湖的需求&#xff0c;因此Flink社区在2022年的时候内部孵化了 …...

chrome v3开发插件实现所有网站允许跨域

场景&#xff1a; chrome 插件 升级到v3后&#xff0c;原来修改请求响应都变成异步&#xff0c;即无法同步拦截来修改请求响应。 在v3中也不支持修改请求响应内容。 问题&#xff1a;如何在chrome v3中允许其他网站跨域呢。 方式一&#xff1a;禁用chrome跨域&#xff0c;禁…...

unity Holoens2开发,使用Vuforia识别实体或图片 触发交互

建议&#xff1a;先看官方文档 我使用的utniy 版本&#xff1a;Unity 2021.3.6f1 官方建议&#xff1a;混合现实工具包简介 - 设置项目并使用手势交互 - Training | Microsoft Learn 配置了正确工具的 Windows 10 或 11 电脑Windows 10 SDK 10.0.18362.0 或更高版本安装了 U…...

从零开始搭建微服务(一)

构建项目父工程 添加公共核心模块 安装nacos 安装nacos nacos 文档地址&#xff1a; https://nacos.io/zh-cn/docs/what-is-nacos.html 本文使用版本2.2.2 下载地址&#xff1a;https://github.com/alibaba/nacos/archive/refs/tags/2.2.2.zip 使用nacos 我们下载是源代码 解…...

一种可以实现安全便捷文件摆渡的跨网文件安全交换软件

为了保护数据的安全性和完整性&#xff0c;很多企业都采用了内外网物理隔离的方式&#xff0c;防止核心数据泄露或被恶意篡改。然而&#xff0c;这也给企业内部或与外部合作伙伴之间的文件交换带来了很多不便和挑战。如何在保证数据安全的前提下&#xff0c;实现跨网文件的快速…...

『 MySQL数据库 』数据库基础之表的基本操作

文章目录 创建表&#x1f5e1;查看表&#x1f5e1;✒ 查看表内所有信息(描述\表结构等)✒ 根据条件查看表内数据✒ 查看表的具体详细信息: 修改表&#x1f5e1;✒ 修改表名:✒ 修改表的存储引擎、编码集(字符集和校验集):✒ 表内插入数据:insert into✒ 在表中新添一个字段(列)…...

如何提高40%的Docker构建时间

1. 背景 在产品开发中构建docker镜像,随着时间的推移,会变得越来越大,构建时间也越来越长。我的目标是构建时间不超过 5 分钟。 2. 遵循Dockerfile的最佳实践 我们首先确保Dockerfile文件遵循Docker官方的最佳实践,具体做法有: 尽量使用官方的基础镜像,Docker推荐使用…...

真正解决jellyfin硬解码转码

前段时间入手一个DS423集成显卡UHD600&#xff0c;搭了一个jellyfin&#xff0c;发现网上关于硬解码的教程基本都存在问题&#xff0c;没有真正解决我的硬解码问题。经过一系列分析修改&#xff0c;最终实现硬解码。先贴效果图&#xff1a; 下载安装jellyfin这里就不叙述&#…...

声音训练数据集哪里找?中文、英文

一般找数据集的都是需要训练底膜的&#xff0c;大家git上找的开源项目大多是预训练模型。预训练就是别人已经训练好的底膜&#xff0c;你在他的基础上进行调整。而我们训练如果他这个模型不理想是需要训练底膜的。 找的方式是从git开源上找 中文 推荐MockingBird&#xff0c;…...

springboot中如何同时操作同一功能

问题描述 测试阶段&#xff0c;由于存在某一功能的同时操作&#xff0c;该功能还是入库逻辑&#xff0c;此时若不进行处理&#xff0c;会造成插入表中多条重复数据&#xff0c;为此该问题需要修复。 解决办法 在接口开始进行对是否存在某个key值的判断&#xff0c;若不存在&…...

YOLOWeeds: 用于棉花生产系统中多类杂草检测的 YOLO 目标检测器的新基准

YOLOWeeds: A novel benchmark of YOLO object detectors for multi-class weed detection in cotton production systems 摘要1、介绍2、总结 摘要 过度依赖除草剂控制杂草&#xff0c;加速了杂草的抗除草剂进化&#xff0c;引起了对环境、食品安全和人类健康的日益关注。自动…...

Vue3:自定义图标选择器(包含 SVG 图标封装)

文章目录 一、准备工作&#xff08;在 Vue3 中使用 SVG&#xff09;二、封装 SVG三、封装图标选择器四、Demo 效果预览&#xff1a; 一、准备工作&#xff08;在 Vue3 中使用 SVG&#xff09; 本文参考&#xff1a;https://blog.csdn.net/houtengyang/article/details/1290431…...

NIO讲解

一&#xff1a;什么是NIO? 二&#xff1a;NIO三大组件 1. channel channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入…...

react中jest配置,解决node_modules报错esm无法解析的问题

重点关注&#xff1a; transformIgnorePatterns: [ "/node_modules/(?!(?:jmfe)/)", ], moduleNameMapper: { "\\.(css|less|scss|sss|styl)$": "jest-css-modules" } 并安装jest-css-modules&#xff08;npm i --save-dev jest-css-mo…...

Qt6,使用 UI 界面完成命令执行自动化的设计

一、需要完成的功能 在子对话框&#xff08;CmdChildQt&#xff09;中&#xff0c;点击 “执行” 按钮&#xff0c;将多个命令行指令&#xff0c;依次输入到父对话框&#xff08;CmdQt&#xff09;的编辑框中并且执行&#xff0c;要求如下&#xff1a; 在前一个命令执行完成后&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数&#xff0c;单位是赫兹&#xff08;Hz&#xff09;。 60Hz 屏幕&#xff1a;每秒刷新 60 次&#xff0c;每次刷新间隔约 16.67ms 90Hz 屏幕&#xff1a;每秒刷新 90 次&#xff0c;…...

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...