packagecom.dao.impl;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.lang.reflect.ParameterizedType;importjava.lang.reflect.Type;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.List;importcom.dao.BaseDao;importcom.db.DBConn;importcom.db.impl.DBConnJdbc;public class BaseDaoImpl implements BaseDao{
DBConn db= newDBConnJdbc();int r=0;privateClass clazz;publicBaseDaoImpl(){
clazz= this.getClass();
Type t=clazz.getGenericSuperclass();
ParameterizedType pe=(ParameterizedType) t;
clazz= (Class) pe.getActualTypeArguments()[0];
System.out.println(clazz);
}//添加
@Overridepublic int add(Entity obj) throwsException {
Connection con=db.getConn();
String tables=clazz.getSimpleName();
Field[] fields=clazz.getDeclaredFields();
String sql= "insert into " + tables + " values(null";for (int i = 1; i < fields.length; i++) {
sql+= ",?";
}
sql= sql + ")";
System.out.println(sql);
PreparedStatement pstmt= null;
pstmt=con.prepareStatement(sql);for (int i = 1; i < fields.length; i++) {
String name= "get"+Character.toUpperCase(fields[i].getName().charAt(0));
name= name + fields[i].getName().substring(1);
Method m=clazz.getMethod(name);
Object value=m.invoke(obj);
pstmt.setObject(i, value);
}
r=pstmt.executeUpdate();
db.close(pstmt);
db.close(con);returnr;
}//删除
@Overridepublic int delete(int id) throwsException {
Connection con=db.getConn();
String tables=clazz.getSimpleName();
Field[] fields=clazz.getDeclaredFields();
String idName= fields[0].getName();
String sql= "delete from " + tables + " where "+idName+" ="+id;
System.out.println(sql);
PreparedStatement pstmt= null;
pstmt=con.prepareStatement(sql);
r=pstmt.executeUpdate();
db.close(pstmt);
db.close(con);returnr;
}//更新
@Overridepublic int update(Entity obj) throwsException {
Connection con=db.getConn();
String tables=clazz.getSimpleName();
String sql= "update "+tables+" set ";
Field[] fields=clazz.getDeclaredFields();
String idName= fields[0].getName();for(int i=1;i
sql+= fields[i].getName() + "=?,";
}
sql= sql.substring(0,sql.length()-1)+" where "+idName+" = ?";
System.out.println(sql);
PreparedStatement pstmt= null;
pstmt=con.prepareStatement(sql);for(int i =1;i
String methodName= "get"+Character.toUpperCase(fields[i].getName().charAt(0))+fields[i].getName().substring(1);
Method m=clazz.getMethod(methodName);
pstmt.setObject(i,m.invoke(obj));
}
String FiledFirstName= "get"+Character.toUpperCase(fields[0].getName().charAt(0))+fields[0].getName().substring(1);
Method m2=clazz.getMethod(FiledFirstName);
pstmt.setInt(fields.length, (Integer)m2.invoke(obj));
r=pstmt.executeUpdate();
db.close(pstmt);returnr;
}//根据id查询
@Overridepublic Entity get(int id) throwsException {
Connection con=db.getConn();
Field[] fields=clazz.getDeclaredFields();
String idName= fields[0].getName();
String sql= "select * from "+clazz.getSimpleName() + " where "+idName+" =" +id;
System.out.println(sql);
PreparedStatement pstmt= null;
pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
Entity entity=(Entity) clazz.newInstance();if(rs.next()){//Field[] fields = clazz.getDeclaredFields();
for(int i=0;i
String methodName= "set" +Character.toUpperCase(fields[i].getName().charAt(0))+fields[i].getName().substring(1);
Method m=clazz.getDeclaredMethod(methodName, fields[i].getType());
Object value=rs.getObject(fields[i].getName());
System.out.println(methodName+ "=========" +value);
m.invoke(entity, value);
}
}
db.closeAll(rs, pstmt, con);returnentity;
}//全查
@Overridepublic List getList() throwsException {
Connection con=db.getConn();
String sql= "select * from "+clazz.getSimpleName();
PreparedStatement pstmt= null;
pstmt=con.prepareStatement(sql);
List list = new ArrayList();
ResultSet rs=pstmt.executeQuery();while(rs.next()){
Entity entrty=(Entity)clazz.newInstance();
Field[] fields=clazz.getDeclaredFields();for(int i=0;i
String methodName= "set"+Character.toUpperCase(fields[i].getName().charAt(0))+fields[i].getName().substring(1);
Method m=clazz.getMethod(methodName, fields[i].getType());
m.invoke(entrty, rs.getObject(fields[i].getName()));
}
list.add(entrty);
}
System.out.println(sql);
db.closeAll(rs, pstmt, con);returnlist;
}
}