重温Java持久化(六)

2014-11-24 08:36:39 · 作者: · 浏览: 10
arams);
}
@Override
public Serializable update(Object entity) throws SQLException, ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
initProperites(entity.getClass());
String cols = buildStrColumn();
String vs = buildValColumn();
String _cols = (cols + ",").replace(",", "= ,");
_cols = _cols.length() > 0 _cols.substring(0, _cols.length() - 1) : "*";
Object[] params = ClassUtil.buildParams(entity, allFields);
Object vKey = ClassUtil.buildParams(entity, keyName);
Object[] _params = new Object[params.length + 1];
for (int i = 0; i < params.length; i++) {
_params[i] = params[i];
}
_params[params.length] = vKey.toString();
String sql = ClassUtil.formartString("update {0} set {1} where {2}= ", new String[] { this.tableName, _cols, this.keyName });
return dbHelper.executeUpdate(sql, _params);
}
@Override
public List query(Class clazz) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
initProperites(clazz);
String cols = buildStrColumn();
String sql = ClassUtil.formartString("SELECT {0} FROM {1}", new String[] { cols, this.tableName });
RowSet rs = dbHelper.executeQuery(sql);
List list = ClassUtil.buildEntities(rs, clazz, allFields);
return list;
}
@Override
public int executeUpdate(String sql, Object... params) throws SQLException, ClassNotFoundException {
return dbHelper.executeUpdate(sql, params);
}
@Override
public RowSet executeQuery(String sql, Object... params) throws SQLException, ClassNotFoundException {
return dbHelper.executeQuery(sql, params);
}
@Override
public Object executeQueryUnique(String sql, Object... params) throws SQLException, ClassNotFoundException {
RowSet rs = dbHelper.executeQuery(sql, params);
if (rs.next())
return rs.getObject(1);
return null;
}
}
=====================================
/**
* 辅助类
* @author ypf
*/
public class ClassUtil {
/**
* 合并Field数组并去重,并实现过滤掉非Column字段,和实现Id放在首字段位置功能
* @param clazz
* @return 所以字段
*/
public static List joinFields(Class clazz) {
List cList = new ArrayList();
List fList = new ArrayList();
// 获取所有类
findAllClass(clazz, cList);
// 获取所有字段
for (Class c : cList) {
for (int i = 0; i < c.getDeclaredFields().length; i++) {
fList.add(c.getDeclaredFields()[i]);
}
}
Map map = new LinkedHashMap();
for (Field field : fList) {
// 过滤掉非Column定义的字段
if (!field.isAnnotationPresent(Column.class)) {
continue;
}
Column column = (Column) field.getAnnotation(Column.class);
map.put(column.name(), field);
}
List list = new ArrayList();
for (String key : map.keySet()) {
Field step = map.get(key);
// 如果是Id则放在首位置.
if (step.isAnnotationPresent(Id.class)) {
list.add(0, step);
} else {
list.add(step);
}
}
return list;
}
/**
* 查找所有类:自身及所有的父类(接口除外)
*
* @param clazz
* @param list
*/
private static void findAllClass(Class< > clazz, List list) {
// 添加自身Class
if (list.size() == 0)
list.add(clazz);
Class< > c = clazz.getSuperclass();
if (c != null) {
list.add(c);
findAllClass(c, list);
}
}
/**
* 创建类及封装属性
* @param clazz
* @param fileds
* @par