当前位置: 首页 > 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; 在前一个命令执行完成后&…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)

零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...

react更新页面数据,操作页面,双向数据绑定

// 路由不是组件的直接跳转use client&#xff0c;useEffect&#xff0c;useRouter&#xff0c;需3个结合&#xff0c; use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...

在ubuntu等linux系统上申请https证书

使用 Certbot 自动申请 安装 Certbot Certbot 是 Let’s Encrypt 官方推荐的自动化工具&#xff0c;支持多种操作系统和服务器环境。 在 Ubuntu/Debian 上&#xff1a; sudo apt update sudo apt install certbot申请证书 纯手动方式&#xff08;不自动配置&#xff09;&…...

Qt Quick模块功能及架构

Qt 6.0 中的 Qt Quick 模块是构建现代、动态用户界面的核心框架&#xff0c;基于声明式编程&#xff08;QML&#xff09;和 JavaScript&#xff0c;专注于高性能、流畅的动画和跨平台 UI 开发。、 一、主要功能改进 1. Qt Quick 核心架构 QML 引擎升级&#xff1a;Qt 6.0 使用…...