struts2 spring hibernate 通用分页 及通用DAO?
谁有?学习用。
通用DAO就是不在创建每个dao了,用一个dao,server都调用这个dao。
谁有?学习用。
通用DAO就是不在创建每个dao了,用一个dao,server都调用这个dao。
解决方案 »
- 求高手!数据库表怎么根据ip字段进行排序?求高手!
- 项目运行时抛出添加时异常,添加方法在其他方法使用正常,求高人解答
- 调查下,你们搭建SPRING框架是用MYECLIPSE添加还是直接把SPRING.JAR拷贝进项目中?
- 请问AXIS2参数传递问题
- JSP页面资源引用问题
- 求助 AXIS2问题
- oracle 动态复制表 如何动态复制主键?(50分)
- 有关oracle导入导出问题
- Struts是怎么把一个表里的数据迭代到页面,能说一下过程吗//
- 为什么出错, 怎么改?
- 烦恼,大家帮忙分析一下,到底是怎么回事啊
- 在MyEclipse7.0下怎么改变application.properties文件的编码方式
不是不创建 而是创建一个 直接继承这个DAO
package com.lzy.drp.util;import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class DBModel<T> implements Serializable {
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private Class cls=null;
public DBModel(Class cls){
this.cls=cls;
} public List<T> QueryModel(String sql,Object params[]){
List<T> list=new ArrayList<T>();
conn=getCon.getCon();
try {
pstmt=conn.prepareStatement(sql);
if(params!=null&¶ms.length>0){
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1, params[i]);
}
}
rs=pstmt.executeQuery();
while(rs.next()){
Object obj=cls.newInstance();
Field[] fields=cls.getDeclaredFields();
for(int i=0;i<fields.length;i++){
int mod=fields[i].getModifiers();
if(Modifier.toString(mod).equals("private")){
String fileName=fields[i].getName();
String setMethod="set"+fileName.substring(0,1).toUpperCase()+fileName.substring(1);
Method md=cls.getDeclaredMethod(setMethod,fields[i].getType());
md.invoke(obj, rs.getObject(fileName));
}
}
list.add((T)obj);
}
} catch (Exception e) {
e.printStackTrace();
}/*finally{
GetConnection.getConInstance().close(conn, pstmt, rs);
}*/
return list;
}
public boolean ModifyModel(String sql,Object[]params){
boolean b=false;
conn=getCon.getCon();
int flag=0;
try{
System.out.println(sql);
pstmt=conn.prepareStatement(sql);
if(params!=null&¶ms.length>0){
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1, params[i]);
}
}
flag=pstmt.executeUpdate();
if(flag>0){
b=true;
}
}catch(Exception e){
e.printStackTrace();
}/*finally{
GetConnection.getConInstance().close(conn, pstmt, rs);
}*/
return b;
} public Object getObject(String sql,Object[]params){
Object obj=null;
conn=getCon.getCon();
try{
pstmt=conn.prepareStatement(sql);
if(params!=null&¶ms.length>0){
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1, params[0]);
}
}
rs=pstmt.executeQuery();
while(rs.next()){
obj=cls.newInstance();
Field []filed=cls.getDeclaredFields();
for(int i=0;i<filed.length;i++){
int mod=filed[i].getModifiers();
if(Modifier.toString(mod).equals("private")){
String fileName=filed[i].getName();
String fileMethod="set"+fileName.substring(0,1).toUpperCase()+fileName.substring(1);
Method method=cls.getDeclaredMethod(fileMethod, filed[i].getType());
method.invoke(obj, rs.getObject(fileName));
}
}
}
}catch(Exception e ){
e.printStackTrace();
}
return obj;
}
}利用反射写的一个简单的, 还有更复杂的 这个有点局限性,就是只能传一个bena 进去 ,遇到需要查询两张表连接的时候,可以写个DTO
有兴趣的看看