重温Java持久化(五)

2014-11-24 08:36:39 · 作者: · 浏览: 4
bject... params) throws SQLException, ClassNotFoundException;
//未完待续...
}
=====================================
/**
* 提供CRUD操作的实现类
* @author ypf
*/
public class SessionImpl implements Session {
private Logger log = Logger.getLogger(SessionImpl.class.getName());
DBHelper dbHelper; // 数据库访问类
Class clazz; // 当前处理对象
String tableName; // 表明
List allFields; // 所有字段
String keyName; // 主键
public void loadContext(ClassLoad c) {
c.execute();
}
/**
* 构建列信息,如:name,type
* @return String
*/
private String buildStrColumn() {
String step = "";
for (int i = 0; i < allFields.size(); i++) {
Column column = (Column) allFields.get(i).getAnnotation(Column.class);
step += column.name() + ",";
}
if (step.length() > 0)
step = step.substring(0, step.length() - 1);
}else {
step = "*";
}
return step;
}
/**
* 构建参数信息,如: ,
* @return String
*/
private String buildValColumn() {
String step = "";
for (int i = 0; i < allFields.size(); i++) {
step += " ,";
}
if (step.length() > 0)
step = step.substring(0, step.length() - 1);
return step;
}
/**
* 初始化
*
* @param clazz
*/
private void initProperites(Class clazz) {
this.clazz = clazz;
if (this.clazz.isAnnotationPresent(Table.class)) {
Table table = (Table) clazz.getAnnotation(Table.class);
this.tableName = table.name();
}
this.allFields = ClassUtil.joinFields(clazz);
for (Field field : allFields) {
if (!field.isAnnotationPresent(Column.class)) {
continue;
}
Column column = (Column) field.getAnnotation(Column.class);
if (field.isAnnotationPresent(Id.class)) {
this.keyName = field.getName();
}
}
log.info("clazz:" + this.clazz + " tableName:" + this.tableName + " keyName:" + this.keyName);
}
public SessionImpl(DBHelper dbHelper) {
this.dbHelper = dbHelper;
}
@Override
public Serializable delete(Object entity) throws SQLException, ClassNotFoundException {
initProperites(entity.getClass());
Object keyValue = ClassUtil.getPropertie(entity, keyName);
String sql = "delete from {0} where {1}= ".replace("{0}", this.tableName).replace("{1}", keyName);
log.info("[delete]:" + sql);
log.info("[params]:" + keyValue);
return dbHelper.executeUpdate(sql, keyValue);
}
@Override
public Object getResource(Serializable id, Class clazz) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
initProperites(clazz);
String cols = buildStrColumn();
String sql = ClassUtil.formartString("SELECT {0} FROM {1} where {2}= ", new String[] { cols, this.tableName, this.keyName });
log.info("[get]:" + sql);
log.info("[params]:" + id);
RowSet rs = dbHelper.executeQuery(sql, id);
List list = ClassUtil.buildEntities(rs, clazz, allFields);
if (list.size() > 0)
return list.get(0);
return null;
}
// 插入
@Override
public Serializable insert(Object entity) throws Exception {
initProperites(entity.getClass());
String cols = buildStrColumn();// 要查询的字段
String vs = buildValColumn();// 预编译参数
String sql = ClassUtil.formartString("insert into {0}({1}) values({2})", new String[] { this.tableName, cols, vs });
Object[] params = ClassUtil.buildParams(entity, allFields);
return dbHelper.executeUpdate(sql, p