mybatisplus(原理)使用方法引用的形式获取实体类对应数据库的列名

本文主要是介绍mybatisplus(原理)使用方法引用的形式获取实体类对应数据库的列名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们现在正常来看 一个mybatisplus正常的查询语句

我们可以看到 ,再如上的代码中 我们使用了  Address::getuserId    方法引用,但是我们把方法引用改成lambda表达式的形式的时候不会报错,但是运行的时候报错。为什么会这样呢?

我们先来看

这个in 方法中传入的是函数式接口,但是她又是如何拿到 实体类的 对应的数据库列名呢?  

我们点击 ctrl+鼠标左键点进去  发现 

in方法中对应的是一个func 接口,继承了serializable类,

而继承serizlizable类的接口,  这个接口中的方法就代表在我们传入函数式对象的时候他是可以序列化的,在变成字节码的时候 会额外存储 这个传入的函数式对象的 类和方法信息,根据这些信息,找到数据库对应的列名。说这些比较抽象 我们具体来举一个例子

我们自己编写一个接口 继承 serializable 接口,然后为了方式我们接口对象看着 不够清晰,我创建了 两个接口对象 ,一个lambda ,一个lambda1,两个只是起到对比作用,

我们用接口对象 lambda 中getclass方法的getdeclaredmethod方法获取类本身声明的方法,然后我们看到有两个方法  ,一个workplace方法,一个是我们的add方法

这个多出来的workplace方法的作用就是 把 原来的 lambda对象信息,和这个方法引用的类和方法的信息综合成一个新的对象 然后序列化

我们看到这结束之后,这个writereplace方法转换成了一个新的对象,可是这个对象是什么类型的我们接下来再看

可以看到这个新的对象类型是 serializedlambda 类型的,接下来我们把这个新对象的包含的信息打印出来

 我们可以发现,已经得到了我们调用的student的getname方法,然后拿到这个方法之后,根据这个方法名找到 实体类对应的成员变量的名字,再找到对应数据库的列名  

但是 为什么用lambda表达式就不行了呢? 我们看这段代码

其他部分内容不变 我们只是换了一种形式,结果发现调用的类 方法都变了,所以再mybatisplus中无法用lambda表达式的形式获取类名称 

这篇关于mybatisplus(原理)使用方法引用的形式获取实体类对应数据库的列名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils