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

lemon框架开发笔记

lemon框架开发笔记

JudgeUtils.isBlank() 字符串为 null 或者 "" ----返回true
JudgeUtils.isNotBlankAll() 字符串全部不为 null 或者 "" ----返回true
JudgeUtils.isBlankAll() 字符串全部为 null 或者 "" ----返回true// isBlank 是在isEmpty的基础上进行了为空(字符串都为空格、制表符、tab 的情况)的判断。因此isBlank层次更高。
  1. Controller 自定义RequestMapping访问路径

  2. 注意service 上的分布式事务处理 查询操作开启事务打开事务消耗性能

  3. lemon 框架处理 id — MonitorIdGenUtils类定义方法,bootstrap.yml 中配置 id

  4. 注意static使用场景

  5. 注意判断 循环 等规范 如下代码:

    // 如果 e.getCertificateExpiryTime() 为空 那么会报错 就算你可以前面做了判断保证数据不为空 
    // 我们也这样书写代码就规范一点                                                         
    if (e.getCertificateExpiryTime().isAfter(LocalDate.now())) {BusinessException.throwBusinessException("到期时间应大于当前时间);
    }// 规范书写 LocalDate.now() 获取当前时间 就绝对不会为空 
    if (LocalDate.now().isAfter(e.getCertificateExpiryTime())) {BusinessException.throwBusinessException("到期时间应大于当前时间);
    }
    
  6. 实体类规范

    1、lemon 框架对 @dataobject 有单独定义,DO是最好不允许出现@DATA的,都用@dataobject,然后自己set/get/tostring。
    2、能用自动生成的DO都不允许修改,需要增加字段,新增DO类继承。
    3BO DTO@data 
    4BO 中基本不允许出现 逻辑代码(据业务情况而定)
    5DO 中是不允许出现 json 注解的
    - Controller	DTO Controller 的数据交互
    - Service		BO Service数据交换
    - Dao		    DO 数据库查出来的都是DO
    
  7. 注意 lambda 表达式 处理完得到的数据要不要判空

  8. git 提交代码的时候 需要注意提交时的注释要与devops需求一致 否则无法push

  9. mysql 可以使用 <> 表示不等于

  10. 大屏的生产数据特别庞大 多表联查会在页面展示的时候造成响应超时。目前最大有700万条数据。

  11. id 判断空的时候 返回null 要考虑其他地方会不会被影响 不判断看代码,你前端必传的话,可以不判断

  12. 特殊情况下拿不到生产的数据、可以打印日志、去日志查询这个数据是什么

  13. 下拉框选择时、数据库存储英文、前端可以通过查询字典配置渲染数据。

  14. 正常、异常、等等。数据库存英文,后台使用枚举、前台可以拿到key、value进行数据渲染

    // 多个List<String> 拼接成一个List<String> 
    public List<String> ListIntegration (List<String>... list) {return Arrays.stream(list).flatMap(List::stream).collect(Collectors.toList());
    }
    // 只要List中包含一个equals()方法需要比较的值、即返回true 注意:List中不可以存在null 否则会报错
    List.stream().anyMatch(list -> list.getInspectionResult().equals(xxx));
    
  15. 异步 – 多个线程之前进行一个通信 – 巡检方面

    java中的异步是指一种编程模型,它允许程序在某个操作执行期间继续执行其他操作,而不是等待该操作完成再继续执行。Java中实现异步的方式有很多,比如使用回调、FutureCompletableFuture等。
    具体来说,Java中的异步操作通常通过多线程实现。在执行异步操作时,程序会创建一个新的线程来执行该操作,而主线程则可以继续执行其他任务,从而提高程序的执行效率和吞吐量。与同步操作相比,异步操作可以避免程序的阻塞等待,从而提高程序的响应速度和用户体验。Java中的线程是指程序并发执行的多个执行线程。Java中创建线程有两种方式:继承Thread类和实现Runnable接口。继承Thread类需要重写run方法,而实现Runnable接口需要实现run方法。使用Runnable接口的方式更加常用,因为它可以避免单继承带来的限制。Java中保证线程安全可以采取多种方式,比如使用synchronized关键字、使用Lock接口、使用volatile关键字等。其中,synchronized关键字是最常用的方式,它可以确保同一时间只有一个线程访问共享资源,从而避免了多线程竞争导致的数据不一致等问题。而volatile关键字则可以确保多个线程之间对于同一变量的修改和读取操作是可见的,从而避免了多线程竞争导致的线程安全问题。
    
  16. 使用lemon 框架啊 mq 走异步(当两个进程进行通信的时候)、操作枚举赋值会抛出异常、需要使用枚举反序列器

    public class 类名 extends JsonDeserializer<枚举类> {@Overridepublic 枚举类 deserialize(final JsonParser jp,final DeserializationContext ctxt) throws IOException {final JsonNode jsonNode = jp.readValueAsTree();return 枚举类.fromValue(jsonNode);}
    }
    
    1. Mysql 判断一个字段是否等于 null或者空的时候,需要跟据字段类型来做过滤;假设要count(1) 不为空的金额总数。金额字段是decimal类型。那么就不可以用 ! = ‘ ’、<> ‘ ’ 来过滤 ;可以用 is not null ; 用 !=、<> 的话、就不会count(1) 金额为 0的数据、主要需要根据字段类型来使用合适的方法过滤数据

      mysql函数 
      date_format(字段名称,'%Y-%m-%d') datetimedate
      
常见错误超出建表最大长度
com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 转换出错
cannot be cast to 
  1. mybatis 编写sql的时候、需要注意传参是否取别名、字段是否正常、表字段是否正常、映射是否可以取出数据。动态sql拼接时注意and、or 有没有添加

  2. 设计表字段时,如果有些字段跟尽量根据以前的表来设计。比如现在新表设计用户名字段。这个用户名字段在以前用户表是存在的,那需要注意长度、命名、表是在生产还是测试环境

  3. 开发代码时新的代码都要往下编写

    @Deprecated 可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。
    
  4. 涉及优化的时候 改动字段 不要动以前的逻辑

  5. 定时任务cron表达式

  6. 大屏 定时任务处理数据、数据校验、手动调用接口

  7. 写sql的时候用分组查询出数据、方便

  8. toDateTime(x) yyyy-MM-dd HH:mm:ss时间函数
    clickhouse 
    toDateTime()`时间函数返回的时间格式为`yyyy-MM-dd HH:mm:ss
    toDateTime(x)`参数x可以是字符串类型也可以是数字类型
    
  9. parseDateTimeBestEffort
    cliskhouse 
    说明:把String类型的时间日期转换为DateTime数据类型
    
  10. 当需要返回一个空的集合、减少内存开销

    使用 Collections.emptyList();

28.写代码的时候不要太局限于list,map的数据处理。想一想,遇到复杂数据加工的时候,可不可以把map和list相互套着用。

29.RedisTemplate的两种序列化实践方案

方案一:(内存开销较大,会存储多余的字节码)
1.自定义RedisTemplate
2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer(bean注入)
方案二:(节省内存空间、步骤麻烦需要手动处理数据)
1.使用StringRedisTemplate
2.写入Redis时,手动把对象序列化为JSON
3.读取Redis时,手动把读取到的JSON反序列化为对象

30.编写代码时、要注意返回值、返回类型是否包装类;避免自动拆箱的风险。

// 避免    
@Overridepublic boolean getLock() {Boolean aBoolean = stringRedisTemplate.opsForValue().setIfAbsent("key", "value", 120, TimeUnit.SECONDS);// 如果直接返回aBoolean有自动拆箱的风险 // 通过下面这种方法返回return Boolean.TRUE.equals(aBoolean);}

31.有关于字符串的操作,频繁的对String对象进行修改,会造成很大的内存开销。此时应该用StringBuffer或StringBuilder来代替String。

而new String()更加不适合,因为每一次创建对象都会调用构造器在堆中产生新的对象,性能低下且内存更加浪费

性能、安全方面存在区别。一般来说,如果在单线程环境下进行字符串操作,建议使用StringBuilder,它的性能更高。而在多线程环境下进行字符串操作时,为了保证线程安全性,应该使用StringBuffer

32.关于resultType与parameterType 的基本使用的区别 :

1、使用resultType :主要针对于从数据库中提取相应的数据出来(出参)

2、使用parameterType :主要针对于将信息存入到数据库中 如:insert 增加数据到数据库(入参)

33.clickhouse使用函数时,索引失效的问题

1、使用Date()去转换一个代表时候的字符串,会造成索引的失效
2、我们可以使用toStartOfMinute() 精确到分钟的一个函数
3、我们还可以在需要使用函数的列上,加上一个函数索引,这样也可以保障索引不会失效

相关文章:

lemon框架开发笔记

lemon框架开发笔记 JudgeUtils.isBlank() 字符串为 null 或者 "" ----返回true JudgeUtils.isNotBlankAll() 字符串全部不为 null 或者 "" ----返回true JudgeUtils.isBlankAll() 字符串全部为 null 或者 "" ----返回true// isBlank 是在isEmpt…...

Spark SQL快速入门

1. 了解Spark SQL 1.1 什么是Spark SQL Spark SQL是spark的一个模块&#xff0c;用于处理海量的结构化数据。 1.2 Spark SQL有什么特点&#xff1f;优点是什么&#xff1f; 特点&#xff1a; Spark SQL支持读取和写入多种格式的数据源&#xff0c;包括Parquet、JSON、CSV、…...

linux+Jenkins+飞书机器人发送通知(带签名)

文章目录 如何使用在linux 上安装python 环境发送消息python脚本把脚本上传倒linux上 jenkins 上执行脚本 如何使用 自定义机器人使用指南飞书官网https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot 在linux 上安装python 环境 yum install python3 python…...

react hooks

1 useEffect(setup,dependencies) 使用object.is来比较每个依赖项和它先前的值 依赖项为空数组的effect不会在组件任何props和state发生改变时重新运行 当useEffect依赖于外部传入props对象时&#xff0c;容易造成死循环 需要对依赖对象进行深比较 import { isEqual } from…...

一起学数据结构(1)——复杂度

目录 1. 时间复杂度&#xff1a; 1.1 时间复杂度的概念&#xff1a; 1.2 时间复杂度的表示及计算&#xff1a; 1.3 较为复杂的时间复杂度的计算&#xff1a; 2. 空间复杂度&#xff1a; 2.1 空间复杂度的概念&#xff1a; 2.2 空间复杂度的计算&#xff1a; 1. 时间复杂度…...

<el-date-picker>组件选择开始时间,结束时间自动延长30min

背景&#xff1a;选择开始时间&#xff0c;结束时间自动增加30分钟&#xff0c;结束时间也可重新选择&#xff0c;如图&#xff1a; <el-form-item label"预约开始时间" prop"value1"><el-date-pickersize"large"v-model"ruleForm…...

eslint-webpack-plugin

说明&#xff1a;现在eslint已经弃用了eslint-loader,如果要安装来使用的话&#xff0c;会报错&#xff0c;烦死人 大概的报错信息如下&#xff1a; ERROR in ./src/index.js Module build failed (from ./node_modules/eslint-loader/dist/cjs.js): TypeError: Cannot read …...

logback中文一直是乱码,logback中文问号

logback一直是乱码 方案一加上UTF-8 方案二我这边方案一不行 在启动参数加上 -Dfile.encodingutf-8 这个竟然就可以了...

C++之文件操作

1.C文件操作 C中文件操作头文件:fstream。   文件类型&#xff1a;文件文件和二进制文件。 文件操作三大类&#xff1a;     ofstream 写操作     ifstream 读操作     fstream:读写操作 文件打开方式&#xff1a; 标志说明ios::in只读ios::out只写,文件不存在则…...

CentOS 7.6安装 MongoDB 5.0.2

https://developer.aliyun.com/article/983777 我遇到的问题&#xff1a;如何以集群的方式启动&#xff0c;使用replSet的方式进行启动&#xff1a; 需要在配置文件上加上replSet的信息 port27017 #端口 bind_ip0.0.0.0 #默认是127.0.0.1 dbpath/usr/local/mongodb/data #数据…...

Windows下安装python3教程

参考:https://blog.csdn.net/kailingr/article/details/128193083 一、安装步骤图解 准备工作&#xff1a; 进官网https://www.python.org/下载Python 安装包&#xff0c;注意&#xff1a;Python 3.9不能在Windows 7或更早版本上使用 安装&#xff1a; 1.下载完之后双击该文…...

opencv-27 阈值处理 cv2.threshold()

怎么理解阈值处理? 阈值处理&#xff08;Thresholding&#xff09;是一种常用的图像处理技术&#xff0c;在机器学习和计算机视觉中经常被用于二值化图像或二分类任务。它基于设定一个阈值来将像素值进行分类&#xff0c;将像素值大于或小于阈值的部分分为两个不同的类别&…...

AAOS 音频焦点请求

文章目录 前言基本概念提供给应用来获取音频焦点的apiAAOS中的音频焦点管理交互矩阵duck的实现流程AAOS 测试应用kitchensink焦点相关 前言 本文章的目标是首先了解Android中音频焦点的基本概念&#xff0c;理解代码中相关音频焦点的使用方法。其次理解AAOS 中相关交互矩阵概念…...

订单系统中的幂等实现

一.订单提交的例子 一个订单生成并支付的过程&#xff0c;大致为&#xff1a;用户点击前端页面提交订单->后端根据此次提交信息生成订单->用户确认订单并进行支付操作->支付成功。 主要分为前端层面&#xff0c;后端系统层面&#xff0c;数据库层面。前端层面不详述…...

三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询

目录 1.根据用户名或者token查询用户信息 会员信息实体类 统一状态Result类 controller层 service层及实现类 dao层 测试&#xff1a; 2.链表分页条件查询 会员等级实体类 封装条件类PageVo controller层 service层及实现类 dao层 Mapper.xml层 测试 vue前端参考 1.根据用户名…...

列表、张量、向量和矩阵的关系

在数学和编程中&#xff0c;列表、张量、向量和矩阵之间有一定的关系。这些概念在不同领域和语境中有略微不同的定义和用法&#xff0c;以下是它们之间的一般关系&#xff1a; 列表&#xff08;List&#xff09;&#xff1a; 列表是编程语言中的一种数据结构&#xff0c;用于存…...

华为数通HCIP-ISIS高级

isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递&#xff0c;到达L1-2路由器时&#xff0c;L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递&#xff1b; 因此L2区域的设备可以学习到L1区域的明细路由&#xff0c;进行访问&#xff1b;…...

CorelDraw怎么做立体字效果?CorelDraw制作漂亮的3d立体字教程

1、打开软件CorelDRAW 2019&#xff0c;用文本工具写上我们所需要的大标题。建议字体选用比较粗的适合做标题的字体。 2、给字填充颜色&#xff0c;此时填充的颜色就是以后立体字正面的颜色。我填充了红色&#xff0c;并加上了灰色的描边。 3、选中文本&#xff0c;单击界面左侧…...

大致了解Redis

为了保证数据的可靠性&#xff0c;Redis 需要在磁盘上读写 AOF 和 RDB&#xff0c;但在高并发场景里&#xff0c;这就会直接带来两个新问题&#xff1a;一个是写 AOF 和RDB 会造成 Redis 性能抖动&#xff0c;另一个是 Redis 集群数据同步和实例恢复时&#xff0c;读 RDB 比较慢…...

javaweb会话技术

cookie的入门使用 package com.hspedu.cookie;import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import …...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...