package li.dao; import java.io.Serializable; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import li.util.Convert; /** * 你的数据对象类可以继承这个类,以使用ActiveRecord的方式操作数据库 * * @param <T> 指示对象类型 * @param <ID> 指示ID类型 * @author li (limingwei@mail.com) * @version 0.1.1 (2012-06-25) */ public class Record<T extends Record<?, ?>, ID extends Serializable> extends AbstractDao<T, ID> implements Map<Object, Object>, Serializable { private static final long serialVersionUID = -488281210680300817L; private Map<Object, Object> fields = new HashMap<Object, Object>();// 存储对象属性值的Map /** * 重写AbstractDao中的list方法,使Record的find和 list方法 支持多表查询 * * @see li.dao.AbstractDao#query(Page, String, Object...) */ public List<T> list(Page page, String sql, Object... args) { return (List<T>) query(page, sql, args); } /** * 得到名为key的属性 */ public Object get(Object key) { return fields.get(key); } /** * 返回属性,并转换为指定类型 */ public <C> C get(Class<C> type, Object key) { return Convert.toType(type, fields.get(key)); } /** * 设置名为key的属性的值为value */ public Object put(Object key, Object value) { return fields.put(key, value); } /** * 设置名为key的属性的值为value */ public T set(Object key, Object value) { fields.put(key, value); return (T) this; } /** * 返回Record的属性个数 */ public int size() { return fields.size(); } /** * 是否为空,即是否属性个数为0 */ public boolean isEmpty() { return fields.isEmpty(); } /** * 是否包含名为key的属性 */ public boolean containsKey(Object key) { return fields.containsKey(key); } /** * 是否包含值为value的属性 */ public boolean containsValue(Object value) { return fields.containsValue(value); } /** * 移除名为key的属性 */ public Object remove(Object key) { return fields.remove(key); } /** * 批量设置属性值 */ public void putAll(Map<? extends Object, ? extends Object> map) { fields.putAll(map); } /** * 清空所有属性 */ public void clear() { fields.clear(); } /** * 返回属性的Set集合 */ public Set<Object> keySet() { return fields.keySet(); } /** * 返回属性值的Collection集合 */ public Collection<Object> values() { return fields.values(); } /** * 返回属性值的Set集合 */ public Set<Entry<Object, Object>> entrySet() { return fields.entrySet(); } /** * 转调用HashMap的toString方法 */ public String toString() { return super.toString() + " : " + fields.toString(); } }