思路:拼接sql,将sql执行结果赋值到相应的字段上。设置Field属性的值:属性对象。set(反射类对象,相应字段的值(Object类型) )。可以抽取将执行结果赋值给相应字段的部分的代码成一个方法,参数为结果集ResultSet和反射类。
public T selectById(Object id) throws Exception{
StringBuffer sql=new StringBuffer("select * from ");
//获取表名
String tableName=clazz.getSimpleName();
TableName annotation = clazz.getAnnotation(TableName.class);
if(annotation!=null){
tableName=annotation.value();
}
sql.append(tableName+" where ");
//获取主键列名
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field:declaredFields){
TableId tableId = field.getAnnotation(TableId.class);
if(tableId!=null){
sql.append(tableId.value()+"="+id);
break;
}
}
//执行sql语句
Connection conn = DbUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql.toString());
ResultSet rs = ps.executeQuery();
//封装数据到实体类
while(rs.next()){
T t=clazz.newInstance();
for (Field field:declaredFields){
field.setAccessible(true);
TableField tableField = field.getAnnotation(TableField.class);
TableId tableId = field.getAnnotation(TableId.class);
//获取属性名
String name = field.getName();
if(tableId!=null){
name=tableId.value();
}
if(tableField!=null){
name=tableField.value();
}
//获取数据库中指定列的值
Object v = rs.getObject(name);
//为指定对象的属性赋值
field.set(t,v);
}
return t;
}
return null;
}
selectAll()
public List<T> selectAll()throws Exception{
List<T> list=new ArrayList<>();
StringBuffer sql=new StringBuffer("select * from ");
//获取表名
String tableName=clazz.getSimpleName();
TableName annotation = clazz.getAnnotation(TableName.class);
if(annotation!=null){
tableName=annotation.value();
}
sql.append(tableName);
//执行sql语句
Connection conn = DbUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql.toString());
ResultSet rs = ps.executeQuery();
Field[] declaredFields = clazz.getDeclaredFields();
//封装数据
while (rs.next()){
T t=clazz.newInstance();
//为实体类的属性赋值
for (Field field:declaredFields){
field.setAccessible(true);
TableField tableField = field.getAnnotation(TableField.class);
TableId tableId = field.getAnnotation(TableId.class);
//获取属性名
String name = field.getName();
if(tableId!=null){
name=tableId.value();
}
if(tableField!=null){
name=tableField.value();
}
//获取数据库中指定列的值
Object v = rs.getObject(name);
//为指定对象的属性赋值
field.set(t,v);
}
list.add(t);
}
return list;
}