
com.gitee.qdbp.jdbc.model.FieldColumns Maven / Gradle / Ivy
package com.gitee.qdbp.jdbc.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import com.gitee.qdbp.tools.utils.VerifyTools;
/**
* 字段及列信息
*
* @author zhaohuihua
* @version 20200905
* @since 3.2.0
*/
public class FieldColumns implements Iterable, Serializable {
/** serialVersionUID **/
private static final long serialVersionUID = 1L;
private final List items;
protected FieldColumns(List items) {
VerifyTools.requireNonNull(items, "items");
this.items = Collections.unmodifiableList(items);
}
/** 获取字段对象列表 **/
public List items() {
return items;
}
@Override
public Iterator iterator() {
return items.iterator();
}
public boolean isEmpty() {
return this.items.isEmpty();
}
public int size() {
return this.items.size();
}
/**
* 获取字段名列表
*
* @return 字段名列表
*/
public List getFieldNames() {
List list = new ArrayList<>();
for (T item : this.items) {
list.add(item.toTableFieldName());
}
return list;
}
/**
* 获取列名列表
*
* @return 列名列表
*/
public List getColumnNames() {
List list = new ArrayList<>();
for (T item : this.items) {
list.add(item.toTableColumnName());
}
return list;
}
/**
* 判断字段名是否存在
* 判断是否匹配:
* 如果当前字段名或目标字段名没有表别名, 只要字段名匹配即为匹配
* 如果当前字段名和目标字段名都有表别名, 则需要表别名和字段名同时匹配
*
* @param fieldName 目标字段名
* @return 是否存在
* @see SimpleFieldColumn#matchesByFieldName(String)
* @see TablesFieldColumn#matchesByFieldName(String)
*/
public boolean containsByFieldName(String fieldName) {
VerifyTools.requireNotBlank(fieldName, "fieldName");
// 遍历查找匹配项
for (T item : this.items) {
if (item.matchesByFieldName(fieldName)) {
return true;
}
}
return false;
}
/**
* 根据字段名获取指定的字段对象, 如果存在重名字段而fieldName未指定表别名将抛出异常
* 判断是否匹配:
* 如果当前字段名或目标字段名没有表别名, 只要字段名匹配即为匹配
* 如果当前字段名和目标字段名都有表别名, 则需要表别名和字段名同时匹配
*
* @param fieldName 目标字段名
* @return 字段对象, 返回的是对象副本
* @throws IllegalArgumentException 指定的字段名存在重名字段
* @see SimpleFieldColumn#matchesByFieldName(String)
* @see TablesFieldColumn#matchesByFieldName(String)
*/
public T findByFieldName(String fieldName) throws IllegalArgumentException {
// 遍历查找匹配项
List matched = findAllByFieldName(fieldName);
// 判断匹配项数量
if (matched.isEmpty()) {
return null;
} else if (matched.size() == 1) {
return matched.get(0);
} else { // 不只一项则抛异常
String desc = toFieldDescString(matched);
throw new IllegalArgumentException("The fieldName matched to multiple field: " + desc);
}
}
/**
* 根据字段名获取指定的字段对象数组(如a.userId,b.userId)
* 判断是否匹配:
* 如果当前字段名或目标字段名没有表别名, 只要字段名匹配即为匹配
* 如果当前字段名和目标字段名都有表别名, 则需要表别名和字段名同时匹配
*
* @param fieldName 目标字段名
* @return 字段对象数组, 返回的是对象副本
* @see SimpleFieldColumn#matchesByFieldName(String)
* @see TablesFieldColumn#matchesByFieldName(String)
*/
public List findAllByFieldName(String fieldName) {
VerifyTools.requireNotBlank(fieldName, "fieldName");
// 遍历查找匹配项
List matched = new ArrayList<>();
for (T item : this.items) {
if (item.matchesByFieldName(fieldName)) {
matched.add(item);
}
}
return matched;
}
/**
* 根据列名获取指定的字段对象, 如果存在重名字段而columnName未指定表别名将抛出异常
* 判断是否匹配:
* 如果当前列名或目标列名没有表别名, 只要列名匹配即为匹配
* 如果当前列名和目标列名都有表别名, 则需要表别名和列名同时匹配
*
* @param columnName 目标列名
* @return 字段对象, 返回的是对象副本
* @throws IllegalArgumentException 指定的列名存在重名字段
* @see SimpleFieldColumn#matchesByColumnName(String)
* @see TablesFieldColumn#matchesByColumnName(String)
*/
public T findByColumnName(String columnName) {
// 遍历查找匹配项
List matched = findAllByColumnName(columnName);
// 判断匹配项数量
if (matched.isEmpty()) {
return null;
} else if (matched.size() == 1) {
return matched.get(0);
} else { // 不只一项则抛异常
String desc = toFieldDescString(matched);
throw new IllegalArgumentException("The columnName matched to multiple column: " + desc);
}
}
/**
* 根据列名获取指定的字段对象(如A.USER_ID,B.USER_ID)
* 判断是否匹配:
* 如果当前列名或目标列名没有表别名, 只要列名匹配即为匹配
* 如果当前列名和目标列名都有表别名, 则需要表别名和列名同时匹配
*
* @param columnName 目标列名
* @return 字段对象, 返回的是对象副本
* @see SimpleFieldColumn#matchesByColumnName(String)
* @see TablesFieldColumn#matchesByColumnName(String)
*/
public List findAllByColumnName(String columnName) {
VerifyTools.requireNotBlank(columnName, "columnName");
// 遍历查找匹配项
List matched = new ArrayList<>();
for (T item : this.items) {
if (item.matchesByColumnName(columnName)) {
matched.add(item);
}
}
return matched;
}
/**
* 根据列别名获取指定的字段对象(用于根据结果集的列别名查询字段信息)
* 如果没有columnAlias将与columnName比较
*
* @param columnAlias 目标列别名
* @return 字段对象, 返回的是对象副本
* @see SimpleFieldColumn#matchesByColumnName(String)
* @see TablesFieldColumn#matchesByColumnName(String)
*/
public T findByColumnAlias(String columnAlias) {
VerifyTools.requireNotBlank(columnAlias, "columnAlias");
// 遍历查找匹配项
for (T item : this.items) {
if (item.matchesByColumnAlias(columnAlias)) {
return item;
}
}
return null;
}
private String toFieldDescString(List matched) {
StringBuilder buffer = new StringBuilder();
for (T field : matched) {
if (buffer.length() > 0) {
buffer.append(", ");
}
buffer.append(field.toTableFieldName());
}
return buffer.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy