
sf.database.util.OrmValueUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sorm Show documentation
Show all versions of sorm Show documentation
java jpa tool for spring
The newest version!
package sf.database.util;
import sf.core.DBObject;
import sf.database.OrmConfig;
import sf.database.meta.ColumnMapping;
import sf.database.meta.MetaHolder;
import sf.database.meta.TableMapping;
import sf.spring.util.ReflectionUtils;
import java.lang.reflect.Field;
/**
* orm的设置值的方法
*/
public class OrmValueUtils {
/**
* 设置值的方法.
*/
public enum BeanValueType {
/**
* 按字段
*/
field,
/**
* 按方法(默认)
*/
method,
/**
* 按reflectasm方法
*/
reflectasm,
/**
* 快速,使用pull和push(暂时未实现)
*/
fast,
/**
* 其他方法(备用,未实现)
*/
other
}
/**
* 实例化,提供快速实例化,或标准实例化
* @param clz
* @param
* @return
*/
public static T instance(Class clz) {
try {
return clz.getDeclaredConstructor().newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 实例化,提供快速实例化,或标准实例化
* @param tm
* @param
* @return
*/
public static T instance(TableMapping tm) {
if (OrmConfig.getInstance().getBeanValueType() == BeanValueType.reflectasm) {
return (T) tm.getConstructorAccess().newInstance();
}
try {
return (T) tm.getThisType().getDeclaredConstructor().newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 设置值
* @param obj
* @param cm
* @param value
* @param
*/
public static void setValue(T obj, ColumnMapping cm, Object value) {
setValue(obj, cm, value, OrmConfig.getInstance().getBeanValueType());
}
/**
* @param obj
* @param cm
* @param value
* @param beanValueType
* @param
*/
public static void setValue(T obj, ColumnMapping cm, Object value, BeanValueType beanValueType) {
switch (beanValueType) {
case reflectasm:
setValueMethodReflectasm(obj, cm, value);
break;
case field:
setValueFieldReflect(obj, cm, value);
break;
case fast:
if (DBObject.class.isAssignableFrom(cm.getMeta().getThisType()) && cm.getMeta().isExistPushMethod()) {
DBObject o = (DBObject) obj;
setValueMethodFast(o, cm, value);
break;
}
case method:
default:
setValueMethodReflect(obj, cm, value);
break;
}
}
/**
* 使用field 反射设置值
* @param obj
* @param cm
* @param value
* @param
*/
private static void setValueFieldReflect(T obj, ColumnMapping cm, Object value) {
Field f = cm.getFieldAccessor().getField();
if (!f.isAccessible()) {
f.setAccessible(true);
}
ReflectionUtils.setField(cm.getFieldAccessor().getField(), obj, value);
}
/**
* 使用method 反射设置值
* @param obj
* @param cm
* @param value
* @param
*/
private static void setValueMethodReflect(T obj, ColumnMapping cm, Object value) {
cm.getFieldAccessor().set(obj, value);
}
/**
* @param obj
* @param cm
* @param value
* @param
*/
private static void setValueMethodReflectasm(T obj, ColumnMapping cm, Object value) {
cm.getMeta().getMethodAccess().invoke(obj, cm.getFieldAccessor().getReflectasmSetterIndex(), value);
}
/**
* @param obj
* @param cm
* @param value
* @param
*/
private static void setValueMethodFast(T obj, ColumnMapping cm, Object value) {
obj.push(cm.getFieldName(), value);
}
/**
* @param obj
* @param cm
* @param
* @param
* @return
*/
public static U getValue(T obj, ColumnMapping cm) {
return getValue(obj, cm, OrmConfig.getInstance().getBeanValueType());
}
/**
* @param obj
* @param cm
* @param beanValueType
* @param
* @param
* @return
*/
public static U getValue(T obj, ColumnMapping cm, BeanValueType beanValueType) {
if (MetaHolder.getMeta(obj.getClass()) != cm.getMeta()) {
throw new RuntimeException("类型不一致");
}
switch (beanValueType) {
case reflectasm:
return getValueMethodReflectasm(obj, cm);
case field:
return getValueFieldReflect(obj, cm);
case fast:
if (DBObject.class.isAssignableFrom(cm.getMeta().getThisType()) && cm.getMeta().isExistPullMethod()) {
DBObject o = (DBObject) obj;
return getValueMethodFast(o, cm);
}
case method:
default:
return getValueMethodReflect(obj, cm);
}
}
/**
* @param obj
* @param cm
* @param
* @param
* @return
*/
private static U getValueFieldReflect(T obj, ColumnMapping cm) {
Field f = cm.getFieldAccessor().getField();
if (!f.isAccessible()) {
f.setAccessible(true);
}
Object value = ReflectionUtils.getField(f, obj);
return (U) value;
}
/**
* @param obj
* @param cm
* @param
* @param
* @return
*/
private static U getValueMethodReflect(T obj, ColumnMapping cm) {
Object value = cm.getFieldAccessor().get(obj);
return (U) value;
}
/**
* @param obj
* @param cm
* @param
* @param
* @return
*/
private static U getValueMethodReflectasm(T obj, ColumnMapping cm) {
Object value = cm.getMeta().getMethodAccess().invoke(obj, cm.getFieldAccessor().getReflectasmGetterIndex());
return (U) value;
}
/**
* @param obj
* @param cm
* @param
* @param
* @return
*/
private static U getValueMethodFast(T obj, ColumnMapping cm) {
Object value = obj.pull(cm.getFieldName());
return (U) value;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy