struts2 spring hibernate 通用分页 及通用DAO?
谁有?学习用。
通用DAO就是不在创建每个dao了,用一个dao,server都调用这个dao。

解决方案 »

  1.   

    泛型
    不是不创建 而是创建一个 直接继承这个DAO
      

  2.   


    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&&params.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&&params.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&&params.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
      

  3.   

    例子找到http://www.blogjava.net/lishunli/archive/2010/03/12/315231.html
    有兴趣的看看
      

  4.   

    是通用的工具类,但是你还要自己写不同的dao都来继承这个工具类。
      

  5.   

    有它独特的优势,现在SSH的天下啊,嘿嘿
      

  6.   

    以后就是S2SJ(Struts2+spring+JPA)的天下了