使用Java泛型和反射技术将Mysql记录集转换为Javabean集合

 使用Java泛型和反射技术将Mysql记录集转换为Javabean集合_第1张图片

实现原理:
* 获取结果集的元数据,得到各列的列名称
* 使用反射,创建参数clazz的对象,调用对象与列名称相对应的所有的set方法
* 【注意】请确保结果集的列名称和Javabean的属性名称、个数和类型完全相同
* 如果属性名称和数据库字段名称不同,可以在sql查询语句中使用  AS 关键字为列起别名

代码,附我的Mysql操作类:

 
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
 * Mysql使SQl
 * Javabean
 * 
 *  @author  
 * 
 */
public  class Mysql {
     private  static Mysql mysql;
     private Connection conn;
     private Statement stmt;
     private Map < String,PreparedStatement > pstmt;
     private Mysql() {
    }
     private Mysql( String url,  String username,  String password) {
         try {
             Class.forName( "com.mysql.jdbc.Driver");
            conn  = DriverManager.getConnection(url, username, password);
            stmt  = conn.createStatement();
            pstmt  =  new HashMap < String, PreparedStatement >();
        }  catch ( Exception e) {
            e.printStackTrace();
        }
    }
     /**
     * 使
     * 
     *  @param  mysql
     *            jdbc:mysql://localhost/table_name
     *            database_name
     *  @param  username
     *            mysqlroot
     *  @param  password
     *            mysql
     *  @return  
     */
     public  static  synchronized Mysql getInstance( String url,  String username,
             String password) {
         if (mysql  == null) {
            mysql  =  new Mysql(url, username, password);
        }
         return mysql;
    }
    
     /**
     * sqlsqlmapkey
     * 
     *  @param  sql
     *            sql
     *  @return  sql
     */
     public  void setPstmt( String key, String sql) {
         try {
            PreparedStatement ps  = conn.prepareStatement(sql);
            pstmt.put(key, ps);
        }  catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
     /**
     * mapsql使使
     * 使setPstmt()sql
     * 
     *  @param  stmt
     *            mapsqlkeysql
     *  @param  arr
     *            使
     *  @return  
     */
     public ResultSet Query( String stmt,  Object... arr) {
         try {
             for (Entry < String, PreparedStatement > en :  this.pstmt.entrySet()) {
                 if (en.getKey().equals(stmt)) {
                    PreparedStatement ps  = en.getValue();
                     for ( int i  = 0; i  < arr.length; i ++) {
                        ps.setObject(i  + 1, arr[i]);
                    }
                     return ps.executeQuery();
                }
            }
             return  this.stmt.executeQuery(stmt);
        }  catch (SQLException e) {
            e.printStackTrace();
        }
         return null;
    }
     /**
     * mapsql使使
     * 使setPstmt()sql
     * 
     *  @param  pstmt
     *            getPstmt()
     *  @param  arr
     *            Object
     *  @return  
     */
     public  int Update( String stmt,  Object... arr) {
         try {
             for (Entry < String, PreparedStatement > en :  this.pstmt.entrySet()) {
                 if (en.getKey().equals(stmt)) {
                    PreparedStatement ps  = en.getValue();
                     for ( int i  = 0; i  < arr.length; i ++) {
                        ps.setObject(i  + 1, arr[i]);
                    }
                     return ps.executeUpdate();
                }
            }
             return  this.stmt.executeUpdate(stmt);
        }  catch (SQLException e) {
            e.printStackTrace();
        }
         return 0;
    }
     /**
     * mysql
     */
     public  void close() {
         if (stmt  != null) {
             try {
                stmt.close();
                stmt  = null;
            }  catch (SQLException e) {
                e.printStackTrace();
            }
        }
         if (conn  != null) {
             try {
                conn.close();
                conn  = null;
            }  catch (SQLException e) {
                e.printStackTrace();
            }
        }
        mysql  = null;
    }
    
     /**
     * 
     * getList()rsclose()
     *  @param  rs 
     */
     public  static  void showResult(ResultSet rs) {
         try {
             //
            ResultSetMetaData rsmd  = rs.getMetaData();
             //
             int lie =rsmd.getColumnCount();
             //
             for ( int i  = 1; i  <= lie; i ++) {
                 System.out.print(rsmd.getColumnName(i) + "\t");
            }
             System.out.println();
             //
             int hang  =0;
             while (rs.next()) {
                hang ++;
                 //
                 for ( int x  = 1; x  <= lie; x ++) {
                     System.out.print(rs.getString(x) + "\t");
                }
                 System.out.println();
            }
             //
             System.out.println(lie + "" +hang + "");
        }  catch (SQLException e) {
            e.printStackTrace();
        } finally{
             try {
                rs.close();
            }  catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
     
     /**
     * Java
     * mysqlJavabeanList
     * 
     * 
     * 
     * 使clazzset
     * Javabean
     * sql使  AS 
     * showResult()rsclose()
     * 
     *  @param  rs Javabean
     *  @param  clazz JavabeanUser.class使
     *              class
     *  @return  JavabeanList
     */
     public  static  <T > List <T >  getList(ResultSet rs, Class <T > clazz) {
        List <T > al  =null;
         try {
            ResultSetMetaData rsmd  = rs.getMetaData();
             int lie =rsmd.getColumnCount();
            al  =  new ArrayList <T >();
             while (rs.next()) {
                T t  = null;
                 try {
                    t  = clazz.newInstance();
                }  catch ( Exception e) {
                    e.printStackTrace();
                }
                 for ( int j  = 0; j  < lie; j ++) {
//              System.out.println("set"+rsmd.getColumnName(j+1)+""+rs.getObject(j+1));
                    invokeX(t,  "set" +rsmd.getColumnName(j+1), rs.getObject(j+1));
                }
                al.add(t);
            }
        }  catch (SQLException e) {
            e.printStackTrace();
        } finally{
             try {
                rs.close();
            }  catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
         return al;
    }
    
     /**
     * 
     *  @param  o 
     *  @param  name 
     *  @param  oo 使null
     *  @return  null
     */
     private  static  Object invokeX( Object o, String name, Object...oo) {
         Class clazz  =o.getClass();
        Method[] mm =clazz.getDeclaredMethods();
         for (Method method : mm) {
             if (method.getName().equalsIgnoreCase(name)) {
                 try {
                     return method.invoke(o, oo);
                }  catch ( Exception e) {
                    e.printStackTrace();
                }
            }
        }
         return null;
    }
}
 使用了这个Mysql操作类,再写Dao层真是太简单了~

 
package com.kxrjkf.user.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.ResourceBundle;
import com.kxrjkf.user.dao.UserDao;
import com.kxrjkf.user.domin.User;
import com.kxrjkf.user.utils.Mysql;
public  class UserDaoImpl  implements UserDao {
     private  static Mysql mysql  = null;
     static {
        ResourceBundle rb  = ResourceBundle.getBundle( "config");
        mysql  = Mysql.getInstance(rb.getString( "url"),
                rb.getString( "username"), rb.getString( "password"));
         String biao  = rb.getString( "biao");
        
         // addsql
        mysql.setPstmt( "addstmt""insert into "  + biao  +  " VALUES(null,?,?,?) ;");
        
         // deletesql
        mysql.setPstmt( "delstmt""DELETE FROM "  + biao  +  " where id=? ;");
        
         // editsql
        mysql.setPstmt( "upstmt""UPDATE "  + biao
                 +  " SET name=?,phone=?,`like`=? where id=? ;");
        
         // findIdsql
        mysql.setPstmt( "findIdstmt", "select * from "  + biao  +  " where id=? ;" );
        
         // getListsql
        mysql.setPstmt( "liststmt""select * from "  + biao  +  " ;");
        
         // getListsql
        mysql.setPstmt( "fenyestmt", "select * from "  + biao  +  " limit ?,? ;" );
        
         // getZongsql
        mysql.setPstmt( "zongstmt""select count(*) from "  + biao  +  " ;");
    }
     /**
     * 
     *  @param  user 
     */
     public  void add(User user) {
        mysql.Update( "addstmt", user.getName(), user.getPhone(),
                user.getLike());
    }
     /**
     * 
     *  @param  id id
     */
     public  void delete( int id) {
        mysql.Update( "delstmt", id);
    }
     /**
     * 
     *  @param  id id
     *  @param  user 
     */
     public  void update( int id, User user) {
        mysql.Update( "upstmt", user.getName(), user.getPhone(),
                user.getLike(), id);
    }
     /**
     * id
     *  @param  id id
     *  @return  null
     */
     public User findId( int id) {
        List <User > u  = mysql.getList(mysql.Query( "findIdstmt", id),
                User. class);
        User user  = null;
         if (u.size()  != 0) {
            user  = u.get(0);
        }
         return user;
    }
     /**
     * 
     *  @return  List
     */
     public List <User > getList() {
         return mysql.getList(mysql.Query( "liststmt"), User. class);
    }
     /**
     * 
     *  @param  qishi 
     *  @param  tiaoshu 
     *  @return  
     */
     public List <User > getList( int qishi,  int tiaoshu) {
         return mysql.getList(mysql.Query( "fenyestmt", qishi, tiaoshu),
                User. class);
    }
     /**
     * 
     *  @return  
     */
     public  int getZong() {
        
        ResultSet rs  = mysql.Query( "zongstmt");
         try {
            rs.next();
             return rs.getInt(1);
        }  catch (SQLException e) {
            e.printStackTrace();
        }
         return 0;
    }
     //
//  public static void main(String[] args) {
//       new UserDaoImpl().add(new User("", "3333", ""));
//       new UserDaoImpl().delete(5);
         // new UserDaoImpl().update(1, new User("", "8888888", ""));
         // System.out.println(new UserDaoImpl().findId(3));
//       for (User u : new UserDaoImpl().getList(1,2)) {
//       System.out.println(u);
//       }
//      UserDaoImpl udi = new UserDaoImpl();
//      System.out.println(udi.getZong());
//  }
}
 


你可能感兴趣的:(JavaWEB)