1.DTO的存在就是为了帮助我们减少客户端请求而降低服务器压力,提升效率。作者还有一个观点大概是指在使用DTO后我们可以灵活定义数据模型,同时将数据模型和逻辑剥离开了。
使用java.bean.PropertyChangeSupport类。 其实就是将你要控制的对象绑定到该工具中。使用匿名内部类来实现监听器,在propertyChange方法中实现你要的处理。该方法会在firePropertyChange触发了事件之后捕获该事件然后执行。
3.字段后面%TYPE 代表的是你之前声明的变量与你指定的表字段类型相同 防止你表改了字段类型 过程报错
* @param list 原List
* @param keyCallback Key回调
* @return .
*/
public static <T extends AbstractSystemModel> Map<Long, List<T>> list2map2(List<T> list,
IList2MapKey<T> keyCallback) {
Map<Long, List<T>> map = new HashMap<Long, List<T>>();
for (T t : list) {
Long key = keyCallback.getKey(t);
List<T> values = map.get(key);
if (null == values) {
values = new ArrayList<T>();
}
values.add(t);
map.put(key, values);
}
return map;
}
* @param list 原List
* @param keyCallback Key回调
* @return .
*/
@SuppressWarnings("unchecked")
public static <T extends AbstractSystemModel> Map<Long, T> list2map(List<T> list,
IList2MapKey keyCallback) {
Map<Long, T> map = new HashMap<Long, T>();
for (T t : list) {
map.put(keyCallback.getKey(t), t);
}
return map;
}
/**
* List2MapKey callback
*
* @author shenhq
* @version 1.0
* @param <T> .
*/
public static interface IList2MapKey<T extends AbstractSystemModel> {
/**
* getKey
*
* @param value .
* @return .
*/
Long getKey(T value);
}
实例: Map<Long, List<PricePlanInstance>> map = ListUtils.list2map2(ppis, new IList2MapKey<PricePlanInstance>() {
public Long getKey(PricePlanInstance value) {
return value.getProductInstance().getId();
}
});
Pattern p = Pattern.compile("\\s|-");
Matcher m = p.matcher(resCode);
resCode = m.replaceAll("");
JdbcTemplate有一个rowMapper方法,映射
映射
由类生成对象 对象.set属性(值) 对象.方法()
反射
由对象得到类,由属性调用对象 Field.set(对象,值)
由方法调用对象 Method.invoke(对象,参数)
获取类的方法
Class c1=类型.class;根据类名获取类
Class c2=对象.getClass();//根据对象获取类
Class c3=Class.forName("包名.类名");
//获取某个属性
Field f=Class.getDeclaredField("名称");//根据名称获取属性
Field[] f=Class.getDeclaredFields();//获取全部属性
field.setAccessable(true);//强制访问
获取方法
Method m=class.getDeclareMethod("名称",参数列表);
Method[] m=class.getDeclareMethods();//得到所有方法