67,550
社区成员




QueryWrapper<Goods> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(Goods::getGoodsId,"123");
QueryWrapper<Goods> wrapper1 = new QueryWrapper<>();
wrapper1.eq("goods_id","123");
//这就是MybatisPlus底层的实现,我只是把它单独拿出来了
public class MybatisPlusApplicationTests {
@Test
public void test() {
//SerializedLambda对象为MybatisPlus中的一个类可以自行查看
SerializedLambda serializedLambda = getSerializedLambda(Banner::getBannerName);
System.out.println(serializedLambda.getImplMethodName()); //输出结果为:getBannerName,再做的个简单的字符串截取即可获得bannerName属性名
}
public static SerializedLambda getSerializedLambda(SFunction<Banner, ?> lambda) {
SerializedLambda serializedLambda = null;
try {
ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(serialize(lambda))) {
protected Class<?> resolveClass(ObjectStreamClass objectStreamClass) throws IOException, ClassNotFoundException {
Class<?> clazz = super.resolveClass(objectStreamClass);
return clazz == java.lang.invoke.SerializedLambda.class ? SerializedLambda.class : clazz;
}
};
serializedLambda = (SerializedLambda) objIn.readObject();
} catch (Exception x) {
}
return serializedLambda;
}
public static byte[] serialize(Object object) {
if (object == null) {
return null;
} else {
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
try {
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(object);
oos.flush();
} catch (IOException var3) {
throw new IllegalArgumentException("Failed to serialize object of type: " + object.getClass(), var3);
}
return baos.toByteArray();
}
}
}
对象方法
System.out.println(serializedLambda.getImplMethodName()); //输出结果为:getBannerName,再做的个简单的字符串截取即可获得bannerName属性名
}
public static SerializedLambda getSerializedLambda(SFunction<Banner, ?> lambda) {
SerializedLambda serializedLambda = null;
try {
ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(serialize(lambda))) {
protected Class<?> resolveClass(ObjectStreamClass objectStreamClass) throws IOException, ClassNotFoundException {
Class<?> clazz = super.resolveClass(objectStreamClass);
return clazz == java.lang.invoke.SerializedLambda.class ? SerializedLambda.class : clazz;
}
};
serializedLambda = (SerializedLambda) objIn.readObject();
} catch (Exception x) {
}
return serializedLambda;
}
public static byte[] serialize(Object object) {
if (object == null) {
return null;
} else {
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
try {
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(object);
oos.flush();
} catch (IOException var3) {
throw new IllegalArgumentException("Failed to serialize object of type: " + object.getClass(), var3);
}
return baos.toByteArray();
}
}
}[code=java]
[/code]
private String getColumn(SerializedLambda lambda) {
String fieldName = StringUtils.resolveFieldName(lambda.getImplMethodName());
if (!this.initColumnMap || this.columnMap.get(fieldName) == null) {
String entityClassName = lambda.getImplClass().replace("/", ".");
this.columnMap = LambdaUtils.getColumnMap(entityClassName);
Assert.notEmpty(this.columnMap, "该模式不能应用于非 baseMapper 的泛型 entity 之外的 entity!");
this.initColumnMap = true;
}
return (String)Optional.ofNullable(this.columnMap.get(fieldName)).orElseThrow(() -> {
return ExceptionUtils.mpe("该模式不能应用于非数据库字段!");
});
}
// StringUtils的resolveFieldName方法实现
public static String resolveFieldName(String getMethodName) {
if (getMethodName.startsWith("get")) {
getMethodName = getMethodName.substring(3);// 把get截取掉
} else if (getMethodName.startsWith("is")) {
getMethodName = getMethodName.substring(2);
}
return firstToLowerCase(getMethodName);// 首字母转为小写 GoodsId ->goodsId
}
最后得到的fieldName 就是属性名