mybatis-plus 3.4.0 - 通过lambda表达式解析获取字段名

14 篇文章 0 订阅

通过序列化,然后反序列化来解析lambda信息

package cn.java.demo.mybatis_plus.internal;

import cn.java.demo.mybatis_plus.mapper.entity.OrderEntity;
import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.property.PropertyNamer;

import java.util.Map;

/**
 */
@Slf4j
public class LambdaResolveDemo {

    public static void main(String[] args) {
        SFunction<OrderEntity, ?> function = OrderEntity::getUserId;
        SerializedLambda serializedLambda = LambdaUtils.resolve(function); // 通过序列化,然后反序列化来解析lambda信息
        getColumn(serializedLambda, true);

    }

    /**
     * @param lambda
     * @param onlyColumn
     * @return
     * @see com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper# getColumn(com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda, boolean)
     */
    static String getColumn(SerializedLambda lambda, boolean onlyColumn) {
        Class<?> aClass = lambda.getInstantiatedType();
        String fieldName = PropertyNamer.methodToProperty(lambda.getImplMethodName());
        log.info("fieldName = {}", fieldName);
        log.info("lambda.getInstantiatedType() = {}", lambda.getInstantiatedType());
        log.info("lambda.getImplMethodName() = {}", lambda.getImplMethodName());
        log.info("lambda.getFunctionalInterfaceClassName() = {}", lambda.getFunctionalInterfaceClassName());
        log.info("lambda.getImplClass() = {}", lambda.getImplClass());
        log.info("lambda.getImplClassName() = {}", lambda.getImplClassName());

        if (false) {
            Map<String, ColumnCache> columnMap = LambdaUtils.getColumnMap(aClass); // 根据java类名读取db表信息
            ColumnCache columnCache = columnMap.get(LambdaUtils.formatKey(fieldName)); // 读取db列信息
            return onlyColumn ? columnCache.getColumn() : columnCache.getColumnSelect(); // 读取db列名
        }

        return "";
    }

}

输出

fieldName = userId
lambda.getInstantiatedType() = class cn.java.demo.mybatis_plus.mapper.entity.OrderEntity
lambda.getImplMethodName() = getUserId
lambda.getFunctionalInterfaceClassName() = com.baomidou.mybatisplus.core.toolkit.support.SFunction
lambda.getImplClass() = class cn.java.demo.mybatis_plus.mapper.entity.AbstractOrderEntity
lambda.getImplClassName() = cn.java.demo.mybatis_plus.mapper.entity.AbstractOrderEntity

 

 

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值