Java开发中使用sql简化开发

引语:

在Java开发中,我们更希望数据库能直接给我们必要的数据,然后在业务层面直接进行使用,所以写一个简单的sql语句有助于提高Java开发效率,本文由简单到复杂的小白吸收,还请多多指教。

使用MySQL数据库,先创建一个简单的表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT NOT NULL,email VARCHAR(100) NOT NULL
);

开始玩吧,先看原始数据

-- 初始
SELECT * from `user`

在这里插入图片描述

以上原始数据,是我们开始的关键,现在有需求,要拿到所有人的name

-- 添加concat返回的是list<String>
SELECT CONCAT(`name`)
from `user`

在这里插入图片描述

但是我们需要的是一个结果,而不是list的,所以这里要用group_concat

-- 使用group_concat, 一个字符串,形式是:["哈哈哈,嘿嘿嘿","空空空,白白白","哈哈哈,嘿嘿嘿","空空空,白白白"]
SELECT GROUP_CONCAT(`name`) as result
from `user`

在这里插入图片描述

我们可以看到结果已经是一个字符串了,但是有重复,我们这里加上去重

-- 根据业务场景,看似满足需求了,的确去重了,结果形式:["哈哈哈,嘿嘿嘿","空空空,白白白"]
SELECT GROUP_CONCAT( DISTINCT `name`) as result
from `user`

在这里插入图片描述

然后拿到目标值啦,发现返回数据没有问题,但是不能直接利用,若想直接想通过正则切分字符串使用,但是切分出来的结果,第一个是:[“哈哈哈,嘿嘿嘿”,最后一个是:“空空空,白白白”],但是我又不想在业务层处理这个 ‘[’ 和 ‘]’,所以sql继续升级,先去掉结果中的 [ ],这里使用replace(字符串结果,要去掉的‘[’,‘成为空字符串’)

SELECT REPLACE(GROUP_CONCAT( DISTINCT `name`),'[','',']','') as result
from `user`

在这里插入图片描述

但是报错了 check the manual that corresponds to your MySQL server version for the right syntax to use near ‘,’]‘,’') as result,我数据库版本不支持,所以用下面的sql

--  使用以下这个版本
SELECT REPLACE(GROUP_CONCAT( DISTINCT `name`),'[','') as result
from `user`

在这里插入图片描述

上面的sql只是先去掉了 ‘[’,继续加replace函数,去掉 ‘]’,如下

-- 但是业务层只能拿到 哈哈哈,嘿嘿嘿,因为 "空空空,白白白"] 这里的 ]还没有处理,那就再加一个replace
SELECT REPLACE(REPLACE(GROUP_CONCAT( DISTINCT `name`),'[',''),']','') as result
from `user`

在这里插入图片描述

直观看的话,数据库展示的数据已经是我们想要的,但是不对,因为我们的value中的形式:“xxx,xxx”,“xxx,xxx”,并不能直接丢出来使用,还需要对结果进一步处理,使用 SEPARATOR 切分

-- 处理得到的最后结果是 "哈哈哈,嘿嘿嘿","空空空,白白白",因为这里name是字符串,它的value用,分隔,我们还需要对最终的结果进行处理,本是想用sql来处理,SEPARATOR
SELECT REPLACE(REPLACE(GROUP_CONCAT( DISTINCT `name` SEPARATOR ','),'[',''),']','') as result
from `user`

最终我们拿到目标结果值,哈哈哈,嘿嘿嘿,空空空,白白白,可以直接使用

如果你觉得太麻烦的话,可以使用更直观的方式,但是可读性就有一些争议了,这里使用trim函数,相比较replace,trim更加简洁

-- 最终方案本来要采取这个的,但是别忘记了sql中一个重要的函数:trim(),该函数可以直接将目标字符串替换,最最终 不用replace 直接一波`user`
SELECT TRIM(BOTH '[]' FROM IFNULL(GROUP_CONCAT( DISTINCT `name` SEPARATOR ','),'')) as result
from `user`

顺带一提:trim()我没有校验,实际感兴趣的大佬可以告诉我答案。

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

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

相关文章

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树、Pipeline、交叉验证

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树案例 除了scikit-learn外&#xff0c;在spark中也提供了机器学习库&#xff0c;即Spark MLlib。 在Spark MLlib机器学习库提供两套算法实现的API&#xff1a;基于RDD API和基于DataFrame API。今天&#xff0c;主要介绍下Data…

【JavaScript】Function的祖传方法call与apply

引言 内容速递 看了本文您能了解到的知识&#xff01; 在本篇文章中&#xff0c;将带你了解什么是call和apply&#xff0c;call和apply的用途、如何手写call和apply以及call和apply的使用场景。 1、什么是call和apply call()和apply()是JavaScript中的两个内置方法&#xff…

数据可视化揭示人口趋势:从数字到图像的转变

人口是一个关乎我们生活的重要话题&#xff0c;而数据可视化技术为我们提供了一种全新的方式来理解和解读人口变化的趋势。通过将大量的人口数据转化为直观的图表和图像&#xff0c;数据可视化帮助我们更好地观察、分析和解释人类发展的重要特征。 数据可视化揭示人口趋势的第一…

【Docker】利用Dockerfile制作个人的镜像文件详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

transformer Position Embedding

这是最近一段很棒的 Youtube 视频&#xff0c;它深入介绍了位置嵌入&#xff0c;并带有精美的动画&#xff1a; Transformer 神经网络视觉指南 -&#xff08;第 1 部分&#xff09;位置嵌入 让我们尝试理解计算位置嵌入的公式的“sin”部分&#xff1a; 这里“pos”指的是“单词…

面试官:为什么RPC框架历经数十年还在造轮子?同时期的EJB骨灰都快找不到了!

文章目录 再谈谈RPC的理解RPC的发展史RPC历经数十年而不衰的原因?1、分布式系统的需求2、RPC相关技术的演进3、多语言的支持 本文源自一次面试官的提问&#xff1a;说说你对于RPC框架的了解&#xff0c;你知道哪些RPC框架&#xff0c;以及为什么RPC历经几十年还能不断推出新的…

Unity URP 2D光照导入与配置

上面随时间变化的火烧云和晚霞&#xff0c;篝火的呼吸光照&#xff0c;都是URP的功劳。 1.什么是URP&#xff1f; URP 全称为 Universal Render Pipeline(通用渲染管线)。 它的特点是在手游和端游均能在保持性能的同时有良好的效果 也就说在多数情况下&#xff0c;在下面的平台…

百度卫星地图切换个性化地图

1.切换 if (mapType.value 1) {mapInstance.setMapType(BMAP_SATELLITE_MAP);//卫星地图} else if (mapType.value 2) {mapInstance.setMapType(BMAP_NORMAL_MAP);//标准地图mapInstance.setMapStyleV2({ styleJson: darkJson });//个性化样式}2.不带路况的卫星地图 mapIn…

Android手写占位式插件化框架之apk解析原理系统源码分析

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; 上一篇文章 Android手写占位式插件化框架之Activity通信、Service通…

硬件设计 之 M.2接口常用知识

M.2接口 也被称为NGFF&#xff08;Next Generation Form Factor&#xff09;&#xff0c;是一种用于固态硬盘&#xff08;SSD&#xff09;和无线网络适配器等设备的高速接口标准。它是一种小型、高密度、高速度的接口&#xff0c;可用于替代传统的SATA接口和PCI Express Mini卡…

浪涌保护器行业应用防雷选型方案

当今社会中&#xff0c;电气设备的使用范围越来越广泛&#xff0c;也越来越普及&#xff0c;而与之相关的浪涌保护器就显得尤为重要。在这个领域&#xff0c;有一种高品质的浪涌保护器 —— 地凯防雷SPD浪涌保护器&#xff0c;它可以为各种设备提供强大的保护&#xff0c;并在各…

抖音小程序开发常见问题

抖音小程序 问题1 抖音小程序调试预留白屏 解决 &#xff0c;连接wifi出现无法打开&#xff0c;用手机流量可以正常访问 抖音小程序 web-view 上传后白屏 抖音小程序使用 webview 白屏&#xff0c;使用web-vew打开h5页面白屏 解决&#xff1a;配置web-view域名 服务器域名配…