jdbc简易泛型dao(二)

2014-11-24 11:47:29 · 作者: · 浏览: 58
n.Column;
import annotation.Entity;
import annotation.Id;
import exception.NotFoundAnnotationException;
/**
* 泛型DAO的JDBC实现
* @author 杨信
* @version 1.0
*/
public class JdbcGenericDaoImpl implements GenericDao {
//表的别名
private static final String TABLE_ALIAS = "t";
@Override
public void save(T t) throws Exception {
Class< > clazz = t.getClass();
//获得表名
String tableName = getTableName(clazz);
//获得字段
StringBuilder fieldNames = new StringBuilder(); //字段名
List fieldValues = new ArrayList(); //字段值
StringBuilder placeholders = new StringBuilder(); //占位符
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(),t.getClass());
if (field.isAnnotationPresent(Id.class)) {
fieldNames.append(field.getAnnotation(Id.class).value()).append(",");
fieldValues.add(pd.getReadMethod().invoke(t));
} else if(field.isAnnotationPresent(Column.class)) {
fieldNames.append(field.getAnnotation(Column.class).value()).append(",");
fieldValues.add(pd.getReadMethod().invoke(t));
}
placeholders.append(" ").append(",");
}
//删除最后一个逗号
fieldNames.deleteCharAt(fieldNames.length()-1);
placeholders.deleteCharAt(placeholders.length()-1);
//拼接sql
StringBuilder sql = new StringBuilder("");
sql.append("insert into ").append(tableName)
.append(" (").append(fieldNames.toString())
.append(") values (").append(placeholders).append(")") ;
PreparedStatement ps = JdbcDaoHelper.getConnection().prepareStatement(sql.toString());
//设置SQL参数占位符的值
setParameter(fieldValues, ps, false);
//执行SQL
ps.execute();
JdbcDaoHelper.release(ps, null);
System.out.println(sql + "\n" + clazz.getSimpleName() + "添加成功!");
}
@Override
public void delete(Object id,Class clazz) throws Exception {
//获得表名
String tableName = getTableName(clazz);
//获得ID字段名和值
String idFieldName = "";
boolean flag = false;
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if(field.isAnnotationPresent(Id.class)) {
idFieldName = field.getAnnotation(Id.class).value();
flag = true;
break;
}
}
if (!flag) {
throw new NotFoundAnnotationException(clazz.getName() + " object not found id property.");
}
//拼装sql
String sql = "delete from " + tableName + " where " + idFieldName + "= ";
PreparedStatement ps = JdbcDaoHelper.getConnection().prepareStatement(sql);
ps.setObject(1, id);
//执行SQL
ps.execute();
JdbcDaoHelper.release(ps,null);
System.out.println(sql + "\n" + clazz.getSimpleName() + "删除成功!");
}
@Override
public void update(T t) throws Exception {
Class< > clazz = t.getClass();
//获得表名
String tableName = getTa