只有绝望的赌鬼才肯把全部所有作孤注的一掷。一个商人如果把他的全部财产装在一只船上,人家就管他叫冒失鬼——席勒

我写了个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 获取表内字段
*
* @param function 字段
* @return java.lang.String
* @author <achao1441470436@gmail.com>
* @since 2021/6/29 16:51
*/
public static <R, T> String getColumn(SFunction<T, R> function) {
SerializedLambda lambda = LambdaUtils.resolve(function);
TableInfo tableInfo = TableInfoHelper.getTableInfo(lambda.getImplClass());
return tableInfo.getFieldList()
.parallelStream()
.filter(filed -> PropertyNamer.methodToProperty(lambda.getImplMethodName()).equals(filed.getProperty()))
.findFirst()
.map(TableFieldInfo::getColumn)
.orElseThrow(() -> new MybatisPlusException("未找到该字段"));
}

依赖mybatis-plus

能通过Function获取属性对应字段

注意需要有BaseMapper

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.ruben.simpleideaspringboot.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruben.simpleideaspringboot.pojo.po.User;
import org.apache.ibatis.annotations.Mapper;

/**
* @author <achao1441470436@gmail.com>
* @since 2021/5/15 0015 22:40
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

演示如下

1
2
3
4
@Test
void testGetColumn() {
System.out.println(getColumn(User::getUsername));
}

image-20210629220827638

支持@TableField注解,也支持自定义的转换规则

默认是驼峰转下划线

效果如下

image-20210629220800888