解忧杂货铺---致java程序员

2023-10-14 22:08

本文主要是介绍解忧杂货铺---致java程序员,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. myslq中count(*)、count(1)的区别
idnameage
1tom16
jack
roles18

如上表:
count(age)=2;(计算age字段值不为空的记录数)
count(*)=3;(计算只要有一个字段值不为空的记录数)
count(1)=1;(计算第一个字段值不为空的记录数)
所以,这也是为什么count(1)的速度要比count(*)快的原因。因为count(1)只需要计算第一列就好了。

2. myslq中 if 的使用
idstatus
15
210
315
410

sql:

select count(if(e.status = 5,1,null)) as '状态为5的数量', count(if(e.status = 10,1,null)) as '状态为10的数量'from employee e;

sql解析:计算状态为5的数量;
count(if(e.status = 5,1,null)) 意思是:如果状态等于5,那么返回1,否则返回null
结果:

状态为5的数量状态为10的数量
12

ps:其实还可以这样:if中加or

select count(if(e.status = 5,1,null)) as '状态为5的数量', count(if(e.status = 10 or e.status = 15,1,null)) as '状态为10或15的数量'from employee e;
3. myslq中 distinct 的使用

表:

idnamesalary
1tom6000.00
2jack7000.00
3roles6000.00
sql解析
count(distinct(id))返回id不同的记录数
select distinct name from user返回name不同的记录
select distinct id,name from user过滤id和name都重复的记录

如上,第二第三条语句只会返回过滤的字段值,啥意思呢?
就是第二条sql只会显示name字段,第三条sql只会显示id,name字段。

有的时候我们既要按照要求过滤重复记录,又要显示所有的字段该怎么办呢?有的时候我们既要按照要求过滤重复记录,又要显示所有的字段该怎么办呢?这个时候我们一般可以使用group by分组来达到去重的效果。

需求:按照salary去重,同时显示其他字段。
解析:select * from employee where id in (select max(id) from employee group by salary);
这样就可以达到我们的目的啦!

4. myslq中 使用循环插入大量数据

当我们在测试的时候想要插入大量数据怎么办?使用JDBC在java中for循环?麻烦!
直接在sql使用存储过程插入就好啦。
例:

DROP PROCEDURE if exists insertdata;
delimiter //
CREATE PROCEDURE insertdata() 
begin 
declare num int; 
set num=1; 
while num < 1000000 do 
insert into tabless (id,title, tel) values(num,concat("title", num),concat("134", num)); 
set num=num+1;
end while;
end//
delimiter;
call insertdata();

主要sql解析:

行号解析
1如果insertdata程序存在则删除(注意:如果PROCEDURE名字一样,则每次使用都要删除掉之前的PROCEDURE,否则报错)
2定界符,sql中是以’;'结尾的,遇到;表示这条语句已经到此为止了。delimiter //的作用就是告诉myslq解释器,遇到// 才表示此语句到此为止。
3创建一个名为:insertdata 的 PROCEDURE
5declare 声明字段类型
最后一行call 调用存储过程,就相当于java调用方法一样(可以这样理解)
5. myslq跨库查询

以前一直觉得我们在配置文件中指定了在哪个数据库就只能在哪个数据库做操作,后面发现只要能够连接上myslq的服务就可以对服务上的所有的数据库做操作,尽管我们程序的配置文件不是指定的该数据库也可以。

cabinet-other库cabinet-system库
bas_case_type表bus_operation_record表
bas_res表bus_cabinet_landing表
bas_res_details表

如上:两个数据库、共5张表
sql:

select count(DISTINCT(rd.res_id)) from `cabinet-other`.bas_case_type ctINNER JOIN `cabinet-other`.bas_res r on ct.identifying=r.types_of_casesinner JOIN `cabinet-other`.bas_res_details rd on rd.res_id=r.idINNER JOIN `cabinet-system`.bus_operation_record ord on ord.epcid=r.epcidinner join `cabinet-system`.bus_cabinet_landing clg on clg.id = ord.cabinet_landing_codewhere r.delete_flag='0' AND ord.flag='0'

跨库查询,只需要在原本的表名之前加上数据库的名称就可以了…

6. mysql UNION 与 UNION ALL的区别

myslq 中 union 与 union all 都是用来将多个结果集合并成一个结果集。
例:
表1:

idname
1jack
2tom

表2:

idname
1jack
2roles

使用UNION 合并的结果是:UNION会自动压缩结果中的重复结果,同时进行默认规则的排序。

idname
1jack
2tom
3roles

使用UNION ALL合并的结果是:UNION ALL则是将全部的结果都展示出来,不管有没有重复,不进行排序。

idname
1jack
2tom
3jack
4roles

ps:使用union和union all必须保证各个select
集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。mysql中应该也是一样的

7.mysql将数据库表中的数字以百分号的形式展现

在做数据提取时,经常会遇到数据所占百分比的问题,在SQL中有专门的语句可以实现。

语法:select concat(round(值A/值B*100,m),’%’)
round函数返回数字表达式并四舍五入为指定的长度或精度。ROUND的格式:ROUND(p1,p2,p3),其作用是取四舍四入值
P1:要被四舍五入的数字
P2:保留的小数位数
P3:如果为0或不输入,则表示进P1进入四舍五入,如ROUND(123.86,1) =123.9
如果P3是不为0的数,则对P1进行截断,可以理解为不四舍五入 ROUND(123.86,1,1)=123.8

当p2非正值时,例如,ROUND(123.86,-1) =120;ROUND(123.86,0) =124;ROUND(123.86,-2) =100;ROUND(123.86,-3) =0

7.js判断数据是不是JSON格式
function isJSON(str) {if (typeof str == 'string') {try {var obj=JSON.parse(str);if(typeof obj == 'object' && obj ){return true;}else{return false;}} catch(e) {console.log('error:'+str+'!!!'+e);return false;}}console.log('It is not a string!')
}
8. Redis中的数据类型

我们都知道Redis中有5中数据类型:string、list、set、hash、zset;殊不知,Redis中还可以存放字节类型的数据,还可以设置key为自增长

我们使用RedisTemplate就是将数据装换成字节然后再存储到Redis中的。

RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
Long increment = entityIdCounter.incrementAndGet();

使用RedisAtomicLong类获取key的自增值,incrementAndGet()方法是先自增再获取,也有先获取再自增的方法getAndIncrement();这两个方法就相当于是++i与i++一样。
参数1:key;参数二:redis连接工厂。

也可以按照一定的步长自增:

RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
Long increment = entityIdCounter.addAndGet(num);//自增量,比如一次自增2
9. Redis数据设置过期时间

自己写的工具类RedisService.java中的方法:

/*** 设置对象* @param key* @param object* @param expireTime    失效时间:null 永不失效/不修改剩余失效时长;其他数值表示失效时长(秒)* @return*/public <K> void setData(String key, K object, Integer expireTime){ValueOperations<String, K> option = redisTemplate.opsForValue();if(expireTime!=null) {// 设置数据option.set(key, object);// 设置失效时间redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);} else {// 删除数据redisTemplate.delete(key);// 设置数据option.set(key, object);}}
10. Redis分布式锁实现
try {// 获取分布式锁Boolean lock = redisTemplate.opsForValue().setIfAbsent("kill_" + id, true);if(lock) {// 获取锁成功// 业务逻辑...}
} catch (Exception e) {throw new RuntimeException(e);
} finally { // 释放分布式锁(避免死锁)redisTemplate.delete("kill_" + id);
}
11. Redis中的数据到了过期时间就立即删除吗?

Redis中有三种删除过期数据的方式。
方式一:立即删除;但是这样会存在一个问题,就是:如果这个时候CPU很忙,而同时间过期的数据又不少,这样就更加的增加了CPU的负担;
方式二:懒惰删除;到了过期时间不立即删除,而是等下次用到的时候再查询该数据的过期时间,如果过期则删除;
方式三:定时删除;
Redis是方式二和方式三结合使用。

12. 项目设置时区
// 设置为UTC世界时
System.setProperty("user.timezone", "UTC");
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
13. IDEA代码设置代理【FQ】
// System.setProperty("proxyHost", "127.0.0.1");
// System.setProperty("proxyPort", "10809");

在这里插入图片描述

这篇关于解忧杂货铺---致java程序员的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/213451

相关文章

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件