package com.qianwen.smartman.common.utils; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.core.toolkit.LambdaUtils; import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache; import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers; import java.util.Collection; import java.util.Map; import org.apache.ibatis.reflection.property.PropertyNamer; import com.qianwen.core.tool.utils.SpringUtil; public class Lambda { public static ExtraLambdaQueryWrapper create() { return new ExtraLambdaQueryWrapper<>(); } public static ExtraLambdaQueryWrapper create(DbType dbType) { return new ExtraLambdaQueryWrapper<>(dbType); } public static ExtraLambdaQueryWrapper eq(SFunction f, Object v) { return new ExtraLambdaQueryWrapper().eq(f, v); } public static ExtraLambdaQueryWrapper eq(boolean condition, SFunction f, Object v) { return new ExtraLambdaQueryWrapper().eq(condition, f, v); } public static ExtraLambdaQueryWrapper ne(SFunction f, Object v) { return new ExtraLambdaQueryWrapper().ne(f, v); } public static ExtraLambdaQueryWrapper in(SFunction f, Collection values) { return new ExtraLambdaQueryWrapper().in(f, values); } public static ExtraLambdaQueryWrapper in(boolean condition, SFunction f, Collection values) { return new ExtraLambdaQueryWrapper().in(condition, f, values); } public static ExtraLambdaQueryWrapper notIn(SFunction f, Collection values) { return new ExtraLambdaQueryWrapper().notIn(f, values); } public static ExtraLambdaQueryWrapper notIn(boolean condition, SFunction f, Collection values) { return new ExtraLambdaQueryWrapper().notIn(condition, f, values); } public static ExtraLambdaQueryWrapper in(SFunction f, Object... values) { return new ExtraLambdaQueryWrapper().in(f, values); } public static ExtraLambdaQueryWrapper in(boolean condition, SFunction f, Object... values) { return new ExtraLambdaQueryWrapper().in(condition, f, values); } public static ExtraLambdaQueryWrapper ge(SFunction f, Object v) { return new ExtraLambdaQueryWrapper().ge(f, v); } public static ExtraLambdaQueryWrapper ge(boolean condition, SFunction f, Object v) { return new ExtraLambdaQueryWrapper().ge(condition, f, v); } public static ExtraLambdaQueryWrapper le(SFunction f, Object v) { return new ExtraLambdaQueryWrapper().le(f, v); } public static ExtraLambdaQueryWrapper between(SFunction f, Object v1, Object v2) { return new ExtraLambdaQueryWrapper().between(f, v1, v2); } public static ExtraLambdaQueryWrapper asc(SFunction f) { return new ExtraLambdaQueryWrapper().orderByAsc(f); } public static ExtraLambdaQueryWrapper desc(SFunction f) { return new ExtraLambdaQueryWrapper().orderByDesc(f); } public static ExtraLambdaQueryWrapper like(SFunction f, Object v) { return new ExtraLambdaQueryWrapper().like(f, v); } public static ExtraLambdaQueryWrapper like(boolean condition, SFunction f, Object v) { return new ExtraLambdaQueryWrapper().like(condition, f, v); } public static LambdaUpdateChainWrapper updateWrapper(BaseMapper baseMapper) { return ChainWrappers.lambdaUpdateChain(baseMapper); } public static LambdaUpdateChainWrapper updateWrapper(Class> cls) { BaseMapper baseMapper = SpringUtil.getBean(cls); return ChainWrappers.lambdaUpdateChain(baseMapper); } public static LambdaQueryChainWrapper chainWrapper(Class> cls) { BaseMapper baseMapper = SpringUtil.getBean(cls); return ChainWrappers.lambdaQueryChain(baseMapper); } public static String getName(SFunction fn) { LambdaMeta meta = LambdaUtils.extract(fn); String fieldName = PropertyNamer.methodToProperty(meta.getImplMethodName()); Map columnMap = LambdaUtils.getColumnMap(meta.getInstantiatedClass()); ColumnCache columnCache = columnMap.get(LambdaUtils.formatKey(fieldName)); Assert.notNull(columnCache, "can not find lambda cache for this property [%s] of entity [%s]", new Object[]{fieldName, meta.getInstantiatedClass().getName()}); return columnCache.getColumn(); } }