java:
流的使用:
- 需求:将得到的对象List 根据某一属性进行分组(例如你需要根据分别对产品id的每种情况进行讨论)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Data public class InfoDTO { private Long equipmentId; private Boolean isSuccess; private Date actingTime;
public InfoDTO(Long equipmentId, Date actingTime) { this.equipmentId = equipmentId; this.actingTime = actingTime; }
public InfoDTO() { } }
ArrayList<InfoDTO> successInfo = new ArrayList<>();
Map<Long,List<InfoDTO>> groupedList = successInfo.stream().collect(Collectors.groupingBy(InfoDTO::getEquipmentId));
|
Map中,值的自增、自减操作的简单写法:
应用场景:查询Map中的某一key值,如果有就+1,如果没有就put进value = 1
🐌原本的写法:判断是否存在key,如果存在则取出value, + 1后再put回去;如果没有就put(key,1)进入
现在:
1
| map.put("你要找的key", map.getOrDefault("你要找的key", 0) + 1);
|
将本地代码打jar包上传服务器并测试运行:
1.将本地项目代码打jar包(idea中)
- Command + ; 打开项目结构界面,创建jar包

- 进入页面后,选择需要创建jar包的主类,点击确定后再应用
- 之后再根据需要构建工件即可在生成目录中得到jar包
2.将jar包上传到服务器指定目录
- 使用sftp与服务器建立连接,使用put方法将本地jar包上传至服务器
1
| put localfilepath remotefilepath
|
3.在服务器对应目录运行jar包进行测试
数据库:
动态查询:
需求:
有许多同类型的表(表名前缀相同,都是类似于xxxx202209 –> 公共前缀+年月信息),由于数据量庞大按月份分成了多张表,我们需要根据前端请求中携带的年月信息去查询不同的表
实现方案:
使用拦截器,(按照我目前的理解。。)对数据库查询语句进行拦截,当查询表名为公共前缀时,就获取请求头传来的日期信息,凭借成完整的表名,去对应的表中查询!
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| package com.xxx.springbootinit.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
import java.util.Map;
@Configuration @MapperScan("com.nrec.springbootinit.mapper") public class MybatisPlusConfig {
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor(); dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> { if("这里填哪些相同结构表名的公共前缀".equals(tableName)) { String dateSuf = RequestDataHelper.getRequestData("date"); return "公共前缀" + dateSuf; }else { return tableName; } }); interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor); return interceptor; } }
package com.xxx.springbootinit.config; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import java.util.Map;
public class RequestDataHelper {
private static final ThreadLocal<Map<String, Object>> REQUEST_DATA = new ThreadLocal<>();
public static void setRequestData(Map<String, Object> requestData) { REQUEST_DATA.set(requestData); }
public static <T> T getRequestData(String param) { Map<String, Object> dataMap = getRequestData(); if (CollectionUtils.isNotEmpty(dataMap)) { return (T) dataMap.get(param); } return null; }
public static Map<String, Object> getRequestData() { return REQUEST_DATA.get(); } }
@GetMapping("/query") public ResultDTO query(@RequestParam("date")String date){ RequestDataHelper.setRequestData(new HashMap<String, Object>() {{ put("date", date);}}); }
|
Linux:
xxx(用户名) 不在 sudoers文件中,此事将被报告 解决方案
执行sudo时提示“XXX 不在sudoers文件中,此事将被报告”
解释:sudo命令可以让你以root身份执行命令,来完成一些我们这个账号完成不了的任务。但是并非所有用户都能够执行sudo,因为有权限的用户都在/etc/sudoers中。
解决方案: