use of com.baomidou.mybatisplus.annotation.TableField in project albedo by somowhere.
the class Wraps method getDbField.
/**
* 根据 bean字段 反射出 数据库字段
*
* @param beanField 字段
* @param clazz 类型
* @return 数据库字段名
*/
public static String getDbField(String beanField, Class<?> clazz) {
ArgumentAssert.notNull(clazz, "实体类不能为空");
ArgumentAssert.notEmpty(beanField, "字段名不能为空");
Field field = ReflectUtil.getField(clazz, beanField);
ArgumentAssert.notNull(field, "在类:{}中找不到属性:{}", clazz.getSimpleName(), beanField);
TableField tf = field.getAnnotation(TableField.class);
if (tf != null && StrUtil.isNotEmpty(tf.value())) {
return tf.value();
}
TableId ti = field.getAnnotation(TableId.class);
if (ti != null && StrUtil.isNotEmpty(ti.value())) {
return ti.value();
}
throw BizException.wrap("{}.{} 未标记 @TableField 或 @TableId", clazz.getSimpleName(), beanField);
}
use of com.baomidou.mybatisplus.annotation.TableField in project muses by acgist.
the class FilterQuery method column.
/**
* 通过MyBatis注解获取数据库列名
*
* @param <T> 类型
*
* @param entity entity
* @param name Java字段名称
*
* @return 数据库列名
*/
private static final <T> String column(Class<T> entity, final String name) {
final Map<String, String> map = COLUMN_CACHE.computeIfAbsent(entity, key -> new ConcurrentHashMap<>());
return map.computeIfAbsent(name, key -> {
final Field field = FieldUtils.getField(entity, name, true);
if (field == null) {
return name;
}
final TableField tableField = field.getAnnotation(TableField.class);
if (tableField != null && StringUtils.isNotEmpty(tableField.value())) {
return tableField.value();
}
final TableId tableId = field.getAnnotation(TableId.class);
if (tableId != null && StringUtils.isNotEmpty(tableId.value())) {
return tableId.value();
}
return name;
});
}
use of com.baomidou.mybatisplus.annotation.TableField in project chao-cloud by chaojunzi.
the class MybatisUtil method getColumn.
/**
* 根据实体获取列名
*
* @param func 表达式
* @return column
*/
static <T, R> String getColumn(SFunction<T, R> func) {
SerializedLambda lambda = SerializedLambda.resolve(func);
// 获取实体类型
Class<?> entityClass = lambda.getImplClass();
// 获取方法类型
String fieldName = StrUtil.getGeneralField(lambda.getImplMethodName());
// 获取属性
Field field = ReflectUtil.getField(entityClass, fieldName);
TableField tableField = AnnotationUtil.getAnnotation(field, TableField.class);
if (tableField != null) {
String column = tableField.value();
if (StrUtil.isNotBlank(column)) {
return column;
}
}
return StrUtil.toUnderlineCase(fieldName);
}
use of com.baomidou.mybatisplus.annotation.TableField in project diboot by dibo-software.
the class QueryBuilder method dtoToWrapper.
/**
* 转换具体实现
*
* @param dto
* @return
*/
private static <DTO> QueryWrapper<?> dtoToWrapper(DTO dto, Collection<String> fields) {
QueryWrapper<?> wrapper;
// 转换
LinkedHashMap<String, FieldAndValue> fieldValuesMap = extractNotNullValues(dto, fields);
if (V.isEmpty(fieldValuesMap)) {
return new QueryWrapper<>();
}
// 只解析有值的
fields = fieldValuesMap.keySet();
// 是否有join联表查询
boolean hasJoinTable = ParserCache.hasJoinTable(dto, fields);
if (hasJoinTable) {
wrapper = new DynamicJoinQueryWrapper<>(dto.getClass(), fields);
} else {
wrapper = new ExtQueryWrapper<>();
}
// 构建 ColumnName
List<AnnoJoiner> annoJoinerList = ParserCache.getBindQueryAnnos(dto.getClass());
BiFunction<BindQuery, Field, String> buildColumnName = (bindQuery, field) -> {
if (bindQuery != null) {
String key = field.getName() + bindQuery;
for (AnnoJoiner annoJoiner : annoJoinerList) {
if (key.equals(annoJoiner.getKey())) {
if (V.notEmpty(annoJoiner.getJoin())) {
// 获取注解Table
return annoJoiner.getAlias() + "." + annoJoiner.getColumnName();
} else {
return (hasJoinTable ? "self." : "") + annoJoiner.getColumnName();
}
}
}
}
return (hasJoinTable ? "self." : "") + BeanUtils.getColumnName(field);
};
// 忽略空字符串"",空集合等
BiFunction<Object, BindQuery, Boolean> ignoreEmpty = (value, bindQuery) -> bindQuery != null && // 忽略空字符串"",空集合等
bindQuery.strategy().equals(Strategy.IGNORE_EMPTY) && (// 字符串""
value instanceof String && S.isEmpty((String) value) || // 空集合
(value instanceof Collection && ((Collection<?>) value).size() == 0));
// 查找加密策略
BiFunction<BindQuery, String, IEncryptStrategy> findEncryptStrategy = (bindQuery, defFieldName) -> {
if (ENABLE_DATA_PROTECT) {
Class<?> clazz = bindQuery == null || bindQuery.entity() == NullType.class ? dto.getClass() : bindQuery.entity();
String fieldName = bindQuery == null || S.isEmpty(bindQuery.field()) ? defFieldName : bindQuery.field();
return ParserCache.getFieldEncryptorMap(clazz).get(fieldName);
}
return null;
};
// 构建QueryWrapper
for (Map.Entry<String, FieldAndValue> entry : fieldValuesMap.entrySet()) {
FieldAndValue fieldAndValue = entry.getValue();
Field field = fieldAndValue.getField();
// 忽略注解 @TableField(exist = false) 的字段
TableField tableField = field.getAnnotation(TableField.class);
if (tableField != null && !tableField.exist()) {
continue;
}
// 忽略字段
BindQuery query = field.getAnnotation(BindQuery.class);
if (query != null && query.ignore()) {
continue;
}
BindQuery.List queryList = field.getAnnotation(BindQuery.List.class);
Object value = fieldAndValue.getValue();
// 构建Query
if (queryList != null) {
wrapper.and(queryWrapper -> {
for (BindQuery bindQuery : queryList.value()) {
if (ignoreEmpty.apply(value, bindQuery)) {
continue;
}
IEncryptStrategy encryptor = findEncryptStrategy.apply(bindQuery, entry.getKey());
Comparison comparison = encryptor == null ? bindQuery.comparison() : Comparison.EQ;
String columnName = buildColumnName.apply(bindQuery, field);
buildQuery(queryWrapper.or(), comparison, columnName, encryptor == null ? value : encryptor.encrypt(value.toString()));
}
});
} else {
if (ignoreEmpty.apply(value, query)) {
continue;
}
IEncryptStrategy encryptor = findEncryptStrategy.apply(query, entry.getKey());
Comparison comparison = query != null && encryptor == null ? query.comparison() : Comparison.EQ;
String columnName = buildColumnName.apply(query, field);
buildQuery(wrapper, comparison, columnName, encryptor == null ? value : encryptor.encrypt(value.toString()));
}
}
return wrapper;
}
use of com.baomidou.mybatisplus.annotation.TableField in project katoumegumi_all by 353259576.
the class FieldColumnRelationMapperFactory method ignoreField.
/**
* 是否忽略field
*
* @param field
* @return
*/
public static boolean ignoreField(Field field) {
Transient aTransient = field.getAnnotation(Transient.class);
if (aTransient != null) {
return true;
}
TableField tableField = field.getAnnotation(TableField.class);
return tableField != null && !tableField.exist();
}
Aggregations