结合mybatis-plus实现Function获取java实体类的属性名
1、工具类
package com.yh.tunnel.util;import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.google.common.base.CaseFormat;
import com.yh.tunnel.domain.Plan;import java.lang.invoke.SerializedLambda;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** @Description* @Date 2019/7/18 10:31* @Author zsj*/
public class TableUtil {//驼峰命名 转下划线命名public static String getColumnName(String fieldName) {String column = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldName);return column;}// 下划线命名 转 驼峰命名public static String getFieldName(String columuName) {String fieldName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, columuName);return fieldName;}/*** 获取实体类的字段名称*/public static <T> String getFieldName(SFunction<T, ?> fn) {SerializedLambda serializedLambda = getSerializedLambda(fn);// 从lambda信息取出method、field、class等String fieldName = serializedLambda.getImplMethodName().substring("get".length());fieldName = fieldName.replaceFirst(fieldName.charAt(0) + "", (fieldName.charAt(0) + "").toLowerCase());Field field;try {field = Class.forName(serializedLambda.getImplClass().replace("/", ".")).getDeclaredField(fieldName);} catch (ClassNotFoundException | NoSuchFieldException e) {throw new RuntimeException(e);}return fieldName.replaceAll("[A-Z]", "$0");}private static <T> SerializedLambda getSerializedLambda(SFunction<T, ?> fn) {// 从function取出序列化方法Method writeReplaceMethod;try {writeReplaceMethod = fn.getClass().getDeclaredMethod("writeReplace");} catch (NoSuchMethodException e) {throw new RuntimeException(e);}// 从序列化方法取出序列化的lambda信息boolean isAccessible = writeReplaceMethod.isAccessible();writeReplaceMethod.setAccessible(true);SerializedLambda serializedLambda;try {serializedLambda = (SerializedLambda) writeReplaceMethod.invoke(fn);} catch (IllegalAccessException | InvocationTargetException e) {throw new RuntimeException(e);}writeReplaceMethod.setAccessible(isAccessible);return serializedLambda;}public static void main(String[] args) {SFunction<Plan, String> getProperty1Function = Plan::getTunnelId;String propertyName = getFieldName(getProperty1Function);System.out.println("属性名: " + propertyName);}}
2、mybatis-plus 中文排序
SFunction<Plan, String> getProperty1Function = Plan::getName;String propertyName = TableUtil.getFieldName(getProperty1Function);String coloumName = TableUtil.getColumnName(propertyName);QueryWrapper<Plan> wrapper = new QueryWrapper<>();wrapper.lambda().ne(Plan::getName, "无预警");wrapper.orderByDesc("CAST(" + coloumName + " AS CHAR CHARACTER SET gbk)");
相关文章:
结合mybatis-plus实现Function获取java实体类的属性名
1、工具类 package com.yh.tunnel.util;import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.google.common.base.CaseFormat; import com.yh.tunnel.domain.Plan;import java.lang.invoke.SerializedLambda; import java.lang.reflect.Field; import…...
vue 响应式数据原理
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 Vue 的响应式数据原理是其核心功能之一,它使得 Vue 应用能够自动响应数据的变化,并在数据变化时自动更新…...
android 计算CRC
<?php /** * 将一个字符按比特位进行反转 eg: 65 (01000001) --> 130(10000010) * param $char * return $char */ function reverseChar($char) { $byte ord($char); $tmp 0; for ($i 0; $i < 8; $i) { if ($byte & (1 << $i)…...
Linux tinyproxy 使用教程
简介 Tinyproxy 是一款轻量级 HTTP 代理服务器,使用最少的资源,非常适合硬件有限的系统。尽管体积小,但它可以处理大量流量,而不会出现明显的性能问题。旨在处理简单的代理任务。它通常用于路由网络流量以保护隐私、缓存或访问受…...
局部规划器设计思路
本文参考知乎文章:如何设计局部规划器 0 引言 局部规划器设计通用方法:生成路径——>寻找最优路径——>后处理优化 1 路径生成 四个问题: ① 如果全局路径中突然出现动态障碍物 ② 如果全局路径非常靠近障碍物 ③ 如果全局路径不容易跟踪(B样条平滑) ④ 如果全局…...
数字图像处理技术期末复习
1. 已知图像的分辨率和深度,怎么求图像的存储空间(位,字节,KB)? 题目: 已知图像的分辨率和深度,怎么求图像的存储空间(位,字节,KB)&a…...
UITableView显示数据,增加数据,删除数据及移动数据行
UITableView和html中的table有点类似的,也有header和footer和body,row。下面给出一个demo // // TableViewTestViewController.m // iosstudy2024 // // Created by figo on 2024/12/9. //#import "TableViewTestViewController.h"interfa…...
金智塔科技喜获CCF中国数字金融大会 GraphRAG竞赛二等奖
12月7日,CCF 首届中国数字金融大会GraphRAG竞赛在上海落下帷幕,金智塔科技(团队名称:塔塔向前冲)从众多参赛队伍中脱颖而出,喜获二等奖。 CCF 首届中国数字金融大会由中国计算机学会主办,中国计…...
方案解读:数字化扩展中如何提升多云应用安全能力?
越来越多企业选择上云,拥抱数字化转型。数据显示,在过去一年中,将应用托管至六种不同环境中的企业比例已经翻倍,达到令人震惊的38%。与此同时,应用和流经其的关键数据已成为日益复杂的网络攻击的首选目标,且…...
“年轻科技旗舰”爱玛A7 Plus正式发布,全国售价4999元
12月18日,备受行业瞩目的“A7上场 一路超神”爱玛旗舰新品发布会在爱玛台州智造工厂盛大举行。 作为年末“压轴产品”的“两轮豪华轿跑”爱玛A7Plus重磅上场,以“快、稳、帅、炫、智、爽”六大超神技惊艳四座,不仅践行了爱玛科技的精品战略&…...
oracle开窗函数笔记、over()笔记
文章目录 开窗函数、组函数、分析函数概念聚合函数和分析函数的区别partition by后面也可以跟多个字段 开窗函数一定要加 聚合函数、或分析函数吗,否则会报错lag()和lead()的用法lag和lead实战开窗函数可以和其他函数一起使用吗? TODO开窗函数中的count(1)是什么意…...
【HarmonyOS】HarmonyOS 和 Flutter混合开发 (一)之鸿蒙Flutter环境安装
【HarmonyOS】HarmonyOS 和 Flutter混合开发 (一)之鸿蒙Flutter环境安装 一、前言 flutter作为开源适配框架方案,已经在Android,IOS,Web,Window四大平台进行了适配,一套代码,可以同…...
海外招聘丨卢森堡大学—人工智能和机器学习中的 PI 用于图像分析
雇主简介 卢森堡大学立志成为欧洲最受推崇的大学之一,具有鲜明的国际化、多语言和跨学科特色。 她促进研究和教学的相互影响,与国家息息相关,因其在特定领域的研究和教学而闻名于世,并成为当代欧洲高等教育的创新典范。 她的核…...
LeetCode hot100-85
https://leetcode.cn/problems/coin-change/?envTypestudy-plan-v2&envIdtop-100-liked 322. 零钱兑换 已解答 中等 相关标签 相关企业 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑…...
linux 内核数据包处理中的一些坑和建议
1、获取IP头部 iph ip_hdr(skb); struct sk_buff { ...... sk_buff_data_t transport_header; /* Transport layer header */ sk_buff_data_t network_header; /* Network layer header */ sk_buff_data_t mac_header; /* Link layer header */ ...... } 1࿰…...
C++ 的衰退复制(decay-copy)
目录 1.什么是衰退复制(decay-copy) 1.1.推导规则 1.2.LWG issue 929 1.3.想象中的 decay_copy 2.decay-copy 与 auto 2.1.为什么引入衰退复制 2.2. 成为 C 23 的语言特性 3.应用场景 4.总结 1.什么是衰退复制(decay-copy࿰…...
vue-cli 5接入模块联邦 module federation
vue-cli 5接入模块联邦 module federation 模块联邦概念实现思路配置遇到的问题: 模块联邦概念 模块联邦由webpack 5最先推出的,让应用加载远程的代码模块来实现不同的Web应用共享代码片段.模块联邦分为两个角色,一个是生产者,一个是消费者.生产者暴露代码供消费者消费 (用一个…...
【Rust自学】3.6. 控制流:循环
3.6.0. 写在正文之前 欢迎来到Rust自学的第三章,一共有6个小节,分别是: 变量与可变性数据类型:标量类型数据类型:复合类型函数和注释控制流:if else控制流:循环(本文) 通过第二章…...
【第八节】git与github
目录 前言 一、 远程仓库概述 二、 创建、配置、连接推送远程仓库 2.1 在 GitHub 上创建仓库 2.2 生成 SSH Key 2.3 验证 SSH 连接 2.4 本地初始化仓库 2.5 推送本地仓库到远程 三、 管理远程仓库 3.1 查看远程仓库 3.2 提取远程仓库更新 3.3 推送更新到远程仓库 …...
win如何访问Linux数据库(本地)
对于数据库的学习,我们都是在localhost主机上进行操作,当我们在Linux系统上安装数据库时,我们就有了尝试在win上去访问Linux上的数据库的想法。 数据库中的用户: 我们都知道数据库中顶级的用户为root,在做创建用户的联…...
OpenClaw技能开发入门:为Qwen3.5-9B-AWQ-4bit定制图片OCR模块
OpenClaw技能开发入门:为Qwen3.5-9B-AWQ-4bit定制图片OCR模块 1. 为什么需要定制OCR技能 去年我在整理几千张产品截图时,发现现有的OCR工具存在三个痛点:无法自动矫正倾斜拍摄的图片、识别结果缺乏结构化处理、无法与工作流联动。这正是Ope…...
别再写重复代码了!微信小程序分页加载与下拉刷新,一个通用组件就搞定
微信小程序分页加载与下拉刷新的工程化实践 每次开发新页面时,你是否还在重复编写分页加载和下拉刷新的逻辑?作为一个有追求的小程序开发者,我们需要思考如何将这些通用功能抽象成可复用的组件或Mixin。本文将带你从工程化角度,设…...
C语言整数字节拆解:联合体与移位操作详解
1. 理解题目:整数字节拆解的核心需求 在嵌入式开发和底层系统编程中,处理多字节数据是家常便饭。就拿这个面试题来说,我们需要从32位无符号整数0x12345678中提取出它的四个独立字节。这看似简单的需求背后,其实涉及到计算机系统中…...
如何利用爬虫技术快速精准地抓取目标数据?
1. 爬虫策略:从"无脑抓"到"精准狙击" 我刚入行时犯过一个典型错误——用单线程脚本无差别抓取整站数据,结果不仅触发反爬机制被封IP,还浪费三天时间清洗90%的无用数据。现在回头看,合理的爬虫策略就像狙击手…...
终极解析器构建指南:Ohm从CSV解析到自定义语法实战
终极解析器构建指南:Ohm从CSV解析到自定义语法实战 【免费下载链接】ohm A library and language for building parsers, interpreters, compilers, etc. 项目地址: https://gitcode.com/gh_mirrors/oh/ohm Ohm是一个强大的解析器构建库和领域特定语言&#…...
终极指南:使用SMU Debug Tool释放AMD Ryzen处理器的隐藏性能
终极指南:使用SMU Debug Tool释放AMD Ryzen处理器的隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...
【NotebookLM 使用教程】 Slides 指令库:11套通用PPT风格Prompt(含中英文对照)
前言适合谁:不想从零写提示词,想直接套用成熟的 PPT 风格结构。你会获得什么:11 套通用风格指令(英文为主,含中文备用),可直接粘贴到 NotebookLM Slides 的描述/自定义。建议阅读顺序࿱…...
3分钟彻底掌握:Windows Defender永久禁用工具defender-control完全指南 [特殊字符]️➡️[特殊字符]
3分钟彻底掌握:Windows Defender永久禁用工具defender-control完全指南 🛡️➡️🚫 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://…...
基于多模态图像融合与深度学习算法的轴承故障诊断模型——GADF+Swin-CNN-GAM与GA...
基于 GADFSwin-CNN-GAM 的高创新轴承故障诊断模型 基于GADFTransformer的轴承故障诊断模型,附说明文件及相关论文,代码一定能跑通,有格拉姆角场GADF,小波变换DWT还有短时傅立叶变换STFT多种转二维图像的方式轴承故障诊断这事儿吧&…...
Tree-sitter解析代码
Tree-sitter 语法树 到底是什么、长什么样、包含什么东西。一、通俗解释Tree-sitter 会把一行行代码,解析成一棵结构化的「语法树」(像家族树一样有层级、有分类),让机器能看懂代码的结构(哪个是方法、哪个是方法名、哪…...
