jdbc简易泛型dao(六)
ropertyDescriptor pd = new PropertyDescriptor(propertyName,t.getClass());
pd.getWriteMethod().invoke(t, paramVal);
}
}
/**
* 根据条件,返回sql条件和条件中占位符的值
* @param sqlWhereMap key:字段名 value:字段值
* @return 第一个元素为SQL条件,第二个元素为SQL条件中占位符的值
*/
private List
if (sqlWhereMap.size() <1 ) return null;
List
List fieldValues = new ArrayList();
StringBuffer sqlWhere = new StringBuffer(" where ");
Set> entrySets = sqlWhereMap.entrySet();
for (Iterator> iteraotr = entrySets.iterator();iteraotr.hasNext();) {
Entry entrySet = iteraotr.next();
fieldValues.add(entrySet.getValue());
Object value = entrySet.getValue();
if (value.getClass() == String.class) {
sqlWhere.append(entrySet.getKey()).append(" like ").append(" ").append(" and ");
} else {
sqlWhere.append(entrySet.getKey()).append("=").append(" ").append(" and ");
}
}
sqlWhere.delete(sqlWhere.lastIndexOf("and"), sqlWhere.length());
list.add(sqlWhere.toString());
list.add(fieldValues);
return list;
}
/**
* 获得表名
*/
private String getTableName(Class< > clazz) throws NotFoundAnnotationException {
if (clazz.isAnnotationPresent(Entity.class)) {
Entity entity = clazz.getAnnotation(Entity.class);
return entity.value();
} else {
throw new NotFoundAnnotationException(clazz.getName() + " is not Entity Annotation.");
}
}
/**
* 设置SQL参数占位符的值
*/
private void setParameter(List values, PreparedStatement ps, boolean isSearch)
throws SQLException {
for (int i = 1; i <= values.size(); i++) {
Object fieldValue = values.get(i-1);
Class< > clazzValue = fieldValue.getClass();
if (clazzValue == String.class) {
if (isSearch)
ps.setString(i, "%" + (String)fieldValue + "%");
else
ps.setString(i,(String)fieldValue);
} else if (clazzValue == boolean.class || clazzValue == Boolean.class) {
ps.setBoolean(i, (Boolean)fieldValue);
} else if (clazzValue == byte.class || clazzValue == Byte.class) {
ps.setByte(i, (Byte)fieldValue);
} else if (clazzValue == char.class || clazzValue == Character.class) {
ps.setObject(i, fieldValue,Types.CHAR);
} else if (clazzValue == Date.class) {
ps.setTimestamp(i, new Timestamp(((Date) fieldValue).getTime()));
} else if (clazzValue.isArray()) {
Object[] arrayValue = (Object[]) fieldValue;
StringBuffer sb = new StringBuffer();
for (int j = 0; j < arrayValue.length; j++) {
sb.append(arrayValue[j]).append("、");
}
ps.setString(i, sb.deleteCharAt(sb.length()-1).toString());
} else {
ps.setObject(i, fieldValue, Types.NUMERIC);
}
}
}
}
4、定义三个注解Entity、Id、Column,生命周期保存在运行期间,以便通过反射获取
1)、Entity
[java]
package annotation;
import java.lang.annotation.ElementType;
import java