import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;import javax.servlet.http.HttpServletRequest;import org.hibernate.Session;
import org.hibernate.Transaction;import com.hz.sessionFactory.HibernateSessionFactory;public class FsFactory {
public static boolean getAdd(String tableName,HttpServletRequest request) throws Exception{
Class clazz = Class.forName(tableName);
Object po = (Object) clazz.newInstance();
Field[] fs = clazz.getDeclaredFields();
for (Field f : fs){
String mname = "set"+f.getName().substring(0,1).toUpperCase()+f.getName().substring(1);
if(!mname.equals("setId")){
Method me = clazz.getMethod(mname, f.getType());
Class fclass = f.getType();
Constructor con = fclass.getConstructor(String.class);
Object obj = con.newInstance(request.getParameter(f.getName())!=null?request.getParameter(f.getName()):"");
me.invoke(po, obj);
}
}
RoleDao j=new RoleDao();
boolean b=j.gettest(po);
System.out.println(b+"添加数据库");
return b;
}
private boolean gettest(Object obj){
Session s = null;
Transaction tx = null;;
try{
s = HibernateSessionFactory.getSession();
tx= s.beginTransaction();
s.save(obj);
tx.commit();
return true;
}catch (Exception e) {
tx.rollback();
e.printStackTrace();
return false;
} finally {
s.close();
}
}
}
小弟用的是struts,hibnate框架作的程序,在Dao封装一个添加的公共类,请各位做下评价,是否可用
既然你用了hibernate,那么实现公用save、update、delete的普遍做法是定义一个实现了公用操作的DAO类,让所有其他DAO都继承这个。方法参数是Object,实现是取得session,调用session的save、update、delete方法。
你写的这个可以说是没有价值的,如果只是想练习反射封装数据,代码可以参考struts如何ActionForm的,具体就是RequestUtils的populate方法。
所以才会有中间过渡用的DTO,ActionForm就是这个功能。Struts准备好的你不用,非要自己写。而Struts的优势就是表示层的ActionForm和控制层的Action,现在你非要抛开ActionForm,那何必用Struts。
最经典的代码就是Struts填充formbean了,自己去看源码吧。