MyBatis-Plus中LambdaQueryWrapper.eq方法获取字段名的原理

queryWrapper.eq()和lambdaQueryWrapper.eq() 确保传入的值类型与数据库字段类型匹配,以避免查询结果不正确或抛出异常。 阅读详情
AI摘要

本文详细解释了在MyBatis-Plus中,如何使用LambdaQueryWrapper.eq方法通过Lambda表达式获取字段名,涉及Function接口定义、实体类示例、Lambda序列化工具和简化版的字段名提取逻辑。实际实现中还包括错误处理和性能优化。

本文用一个例子演示MyBatis-Plus中LambdaQueryWrapper.eq方法获取字段名的原理。这个示例仅用于演示基本原理,实际 MyBatis-Plus 的实现会更复杂,包含更多的错误处理和优化。

以下是一个简化的实现步骤:

  1. 定义一个可序列化Function接口:首先定义一个可序列化Function的,支持序列化成SerializedLambda。

  2. 定义一个实体类:首先定义一个简单的实体类,用于演示如何通过方法引用来引用其属性。

  3. 创建 Lambda 表达式的序列化工具:定义一个工具类,用于将 Lambda 表达式转换为 SerializedLambda,进而提取出方法名。

  4. 实现字段名提取逻辑:通过解析 SerializedLambda 获取到的方法名,转换为对应的字段名。

下面是具体的代码实现:

步骤 1: 定义一个可序列化Function接口

@FunctionalInterface
public interface SFunction<T, R> extends Function<T, R>, Serializable {
}

步骤 2: 定义一个实体类

public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

步骤 3: 创建 Lambda 表达式的序列化工具

这个工具类会使用反射来将 Lambda 表达式转换为 SerializedLambda。

import java.lang.invoke.SerializedLambda;
import java.lang.invoke.LambdaMetafactory;
import java.lang.reflect.Method;

public class LambdaUtils {
    public static SerializedLambda serializeLambda(Serializable lambda) {
        try {
            Method method = lambda.getClass().getDeclaredMethod("writeReplace");
            method.setAccessible(true);
            return (SerializedLambda) method.invoke(lambda);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

步骤 4: 实现字段名提取逻辑

这个示例方法将接受一个 Lambda 表达式,序列化它,然后提取出方法名,并简单地将方法名转换为字段名(假设方法名遵循常见的 Java Bean 命名约定)。

import java.util.function.Function;

public class LambdaQueryWrapper<T> {
    public <R> void eq(Function<T, R> column) {
        SerializedLambda lambda = LambdaUtils.serializeLambda((Serializable) column);
        String methodName = lambda.getImplMethodName();
        String fieldName = methodName.substring(3); // 移除 "get" 前缀
        fieldName = Character.toLowerCase(fieldName.charAt(0)) + fieldName.substring(1); // 将首字母转换为小写

        // 这里只是打印出字段名,实际上 MyBatis-Plus 会使用这个字段名来构建查询
        System.out.println("Field name: " + fieldName);
    }
}

示例使用

public class Main {
    public static void main(String[] args) {
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getName); // 输出应该是 "Field name: name"
    }
}

这个示例展示了如何通过一个 Lambda 表达式来获取字段名,但请注意这只是一个非常简化的版本。MyBatis-Plus 中实际的实现会更加复杂,包括但不限于处理不同类型的 Lambda 表达式、缓存 SerializedLambda 实例以提高性能,以及将 Java 属性名转换为遵循特定命名策略的数据库列名。

lambdaQuery中EQ、NE、GT、LT、GE、LE的用法 (来自网络收集) 小滴课堂工业级pass云平台项目 lt:less than 小于 le:less than or equal to 小于等于 eq:equal to 等于 ne:not equal to 不等于 ge:greater than or equal to 大于等于 gt:greater than 大于 lq: 是小于等于 Maybatis-Plus lambdaQuery和mapper中EQ、NE、GT、LT、GE、LE的用法及详解 1.等于当前时间 //EQ 就是 EQUAL等于 taskFlowServic 阅读详情

相关推荐

MyBatis-Plus

MyBatis-Plus(简称MP)是Mybatis的一个增强工具,在Mybatis的基础上只做增强不做改变,为简化开发提高效率而生。MyBatis-Plus提供了代码生成器,可以一键生成controller、service、mapper、model、mapper.xml代码,同时还提供了非常丰富的CRUD操作。 MyBatis-Plus集成 1.首先需要在SpringBoot项目中集成MyBatis-Plus,在pom.xml中添加相关依赖,主要是MyBatis-Plus、MyBatis-Plus G

qq_45573726的博客 577

LambdaQueryWrapper用法简单介绍

1.层级关系 2.LambdaQueryWrapper :与QueryWrapper查询类似,不过使用的是Lambda语法。 举例如下: package com.mszlu.blog.dao.pojo; import lombok.Data; @Data public class Comment { private Long id; private String content; private Long createDate; private Long art

weixin_41629964的博客 8万+

MyBatis-Plus 中 LambdaQueryWrapper 方法引用的完整解析

是 MyBatis-Plus 提供的一个链式查询条件构造器,允许通过Lambda 表达式或方法引用代替字符串硬编码,从而构建类型安全的 SQL 查询条件。// 方法引用通过这类方法引用,开发者可以避免直接书写数据库字段名(如name或email),减少因字段名拼写错误导致的运行时问题。@TableField("user_name") // 强制指定字段名// Getter// 生成的 SQL:WHERE user_name = 'Alice'特性优势适用场景类型安全。

m0_62877514的博客 1616

LambdaQueryWrapper MyBatis-Plus 用法大全 个人列子

LambdaQueryWrapper 和QueryWrapper方法使用 mybatis-plus

weixin_53981492的博客 4万+

MyBatis-Plus中queryWrapper和lambdaQueryWrapper的eq方法实战对比:哪个更适合你的项目?

本文深入对比了MyBatis-Plus中QueryWrapper和LambdaQueryWrapper的eq方法,分析了两者在类型安全、性能表现和适用场景上的差异。通过实战示例和性能测试,帮助开发者根据项目需求选择最合适的条件构造方式,提升代码质量和开发效率。

weixin_29232121的博客 364

MyBatis-Plus中queryWrapper.eq()与lambdaQueryWrapper.eq()的类型安全实践指南

本文详细探讨了MyBatis-Plus中queryWrapper.eq()与lambdaQueryWrapper.eq()的类型安全实践,重点分析了类型安全在数据库查询中的重要性,并提供了多种防御性编程方案。通过对比传统字符串字段名与Lambda表达式的方式,展示了如何利用Java类型系统避免常见错误,确保查询条件的类型安全。文章还涵盖了日期时间、枚举等复杂类型的处理技巧,以及性能与安全性的平衡策略。

weixin_30342209的博客 492

详细梳理 MyBatis-Plus 的 QueryWrapper 和 LambdaQueryWrapper的入门到精通

方法说明示例eq等于eq(“name”, “张三”) → name = ‘张三’ne不等于gt大于ge大于等于lt小于le小于等于between区间like模糊匹配like(“name”, “三”)likeLeft左模糊likeLeft(“name”, “三”) → name LIKE ‘%三’likeRight右模糊likeRight(“name”, “三”) → name LIKE ‘三%’in IN查询notInNOT IN。

tigerhhzz的博客 2830

Mybatis plus:Wrapper接口

MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。​andor。

游王子og的博客 1709

Mybatis-Plus中QueryWrapper 与 LambdaQueryWrapper 的区别

/ 可能是 "name" 或 "username"lambdaWrapper.eq(User::getNam, "张三");lambdaWrapper.eq(User::getName, "张三");queryWrapper.eq("name", "张三");// ❌ 需要手动改为 "username"queryWrapper.eq("nam", "张三");lambdaWrapper.eq(User::getName, "张三")queryWrapper.eq("name", "张三")

BillKu的博客 1192

mybatis-plus 条件构造器的使用(QueryWrapper、UpdateWrapper和 LambdaQueryWrapper)

介绍了 mybatis-plus 使用条件构造器(QueryWrapper、UpdateWrapper、LambdaUpdateWrapper)简化 sql 操作,方便快捷

zwl2220943286的博客 3777

MyBatis-Plus LambdaQueryWrapper 详解:优雅构建类型安全的查询条件

它通过**方法引用(Lambda 表达式)**的方式引用实体类的属性,从而在编译期检查字段名的正确性,避免运行时因拼写错误导致的 SQL 异常。在 Java 开发中,MyBatis-Plus(MP)作为 MyBatis 的增强工具,提供了许多便捷的 CRUD 操作方式。可以让你的 MyBatis-Plus 代码更加健壮、优雅!是一个强大的查询条件构造器,它利用 Lambda 表达式实现。是 MyBatis-Plus 提供的一种。是 MyBatis-Plus 提供的。的查询条件拼接,避免了传统。

qq_42763903的博客 1767

告别手写SQL!MyBatis-Plus的LambdaQueryWrapper实战:从eq到in的完整查询指南

本文详细介绍了MyBatis-Plus的LambdaQueryWrapper实战技巧,从基础的eq查询到复杂的in操作,帮助开发者告别手写SQL的烦恼。通过lambda表达式实现类型安全的查询条件构建,提升代码可读性和维护性,同时避免SQL注入风险。文章包含丰富的代码示例和最佳实践,是Java后端开发者的实用指南。

cok8420的博客 447

全网详解MyBatis-Plus LambdaQueryWrapper的使用说明以及LambdaQueryWrapper和QueryWapper的区别

全网详解MyBatis-Plus LambdaQueryWrapper的使用说明以及LambdaQueryWrapper和QueryWapper的区别

念兮为美 1万+

MyBatis-Plus中LambdaQueryWrapper的allEq方法使用技巧

在日常开发中,我们经常需要根据多个条件进行查询,传统的做法是逐个调用`eq()`方法,代码冗长且不易维护。MyBatis-Plus的`LambdaQueryWrapper`提供了强大的`allEq()`方法,能够一次性处理多个字段的等值查询,极大提升了开发效率和代码可读性。 本文将深入解析`allEq()`方法的各种使用技巧,帮助你掌握这个强大的工具。 ## allEq方法概述 `allEq...

gitblog_01418的博客 372

反激变压器反射电压详解

我以前做过隔离式的POE模块,其电路实际就是个反激式开关电源。只不过其输入电压范围比较低,为44V-57V。 电路如下图,就是个flyback。 可以看到,电路中有个钳位电路,用来抑制电压尖峰,就在初级线圈那里。 问题 抑制尖峰通常有2种电路,一种叫RCD钳位,另外一种是用TVS管+二极管钳位。 这两种实际中都有用,今天我不想讨论它们的区别,只想说明一个问题: 为什么不能只用一个二极管搞定?像继电器电路那样?不也能抑制尖峰吗? 答案自然是不行的...

weixin_42005993的博客 2万+

prometheus 从入门到精通(史上最全)

Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。原文链接:https://blog.csdn.net/qq_45277554/article/details/130917620时间序列数据。

流水_鱼鱼的博客 1万+

MyBatis-Plus——条件构造器Wapper、QUeryWrapper、UpdateWrapper、LambdaQueryWrapper、LambdaUpdateWrapper(详解)

目录一、条件构造器简介二、QueryWrapper组装查询条件三、QueryWrapper组装排序条件四、QueryWrapper组装删除条件五、QueryWrapper实现修改功能六、QueryWrapper条件的优先级七、QueryWrapper组装select字句(查询指定字段)八、QueryWrapper组装子查询九、UpdateWrapper实现修改功能十、QueryWrapper使用condition组装条件十一、LambdaQueryWrapper(推荐)十一、LambdaUpdateWrap

weixin_51351637的博客 1万+

薄膜比拟、开口截面扭转承载力以及风电混塔水平缝张开状态下抗扭承载力推导

风电混塔水平缝张开状态下的抗扭承载力推导,从弹性力学说起

George的博客 877

MyBatis-Plus中queryWrapper和lambdaQueryWrapper的eq方法实战避坑指南

本文深入探讨了MyBatis-Plus中queryWrapper和lambdaQueryWrapper的eq方法在实际使用中的常见问题与解决方案。重点分析了类型匹配问题、索引失效场景及性能优化策略,提供了类型转换最佳实践和特殊值处理方法,帮助开发者避免常见错误并提升查询效率。

weixin_30872337的博客 218

手把手教你用ROS2 Humble给PX4无人机写个“画圆”程序:从C++代码到Gazebo仿真全流程

本文详细介绍了如何使用ROS2 Humble和PX4飞控实现无人机圆形轨迹控制,涵盖从环境配置、Gazebo仿真到C++代码实现的完整流程。通过实战教程,读者将掌握轨迹跟踪仿真的核心技术,包括ROS2与PX4的通信接口、圆形轨迹算法设计及Gazebo仿真调试技巧。

weixin_29056781的博客 257

BMS菊花链芯片怎么选?一张表对比ADI、TI、NXP五大厂家的隔离通信方案

本文深入对比了ADI、TI、NXP等五大厂商的BMS菊花链芯片隔离通信方案,涵盖技术演进、核心参数和场景化选型策略。通过实测数据和开发经验分享,帮助工程师在新能源汽车和储能系统中选择最优方案,提升通信可靠性和成本效益。

weixin_33724046的博客 433

MyBatis Plus LambdaQueryWrapper:简化数据库查询的利器

LambdaQueryWrapper是MyBatis Plus提供的一种查询构造器,它基于Lambda表达式,允许开发者以类型安全的方式构建复杂的SQL查询。与传统的字符串拼接查询相比,LambdaQueryWrapper具有更好的可读性和可维护性。MyBatis Plus的LambdaQueryWrapper提供了一种类型安全、简洁高效的查询方式,极大地简化了数据库操作。通过本文的介绍,你应该已经掌握了LambdaQueryWrapper的工作原理、常见用法以及实际应用场景。

xycxycooo的博客 1675

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高级集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 350
上一篇: 如何实现MapStruct自定义映射逻辑
下一篇: Python的解包语法
ken_coding
博客等级 码龄4年 239粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值