一个用泛型简单实现的数据库查询实体方法

    private Connection conn = null;
    private PreparedStatement pstmt = null;
    private ResultSet rs = null;


/**

     *
     * @param <T>
     * @param clazz 实体类
     * @param sql 执行的sql语句
     * @param paramList 参数列表
     * @return List<Class>
     */
    public <T> List<T> getObjectWithList(Class<T> clazz,String sql,List<Object> paramList)
    {
        T object = null;
        
        List<T> resultList = new ArrayList<>();
        
        List<Map<String,Object>> listOfMap = new ArrayList<>();
        
        conn = DBConnector.getConnection();
        try {
            pstmt = conn.prepareStatement(sql);
            if(null != paramList && paramList.size() != 0)
            {
                for(int paramIndexInParamList = 0 ; paramIndexInParamList < paramList.size() ; paramIndexInParamList++)
                {
                    pstmt.setObject(paramIndexInParamList+1, paramList.get(paramIndexInParamList));
                }
            }
            rs = pstmt.executeQuery();
            
            ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
            
            int numberOfColumns = rsmd.getColumnCount();
            
            //将查询到的数据从ResultSet中提取出来
            while(rs.next())
            {
                Map<String,Object> map = new HashMap<String,Object>();
                for(int columnIndex = 0 ; columnIndex < numberOfColumns ; columnIndex++)
                {
                    String columnName = rsmd.getColumnLabel(columnIndex + 1);
                    map.put(columnName, rs.getObject(columnName));
                }
                listOfMap.add(map);
            }
            
            
            //遍历List,将数据塞入实体
            if(listOfMap.size() > 0)
            {
                for(Map<String,Object> map : listOfMap)
                {
                    if(!(map.size() > 0)){ continue;}
                    object = clazz.newInstance();
                    for(Map.Entry<String, Object> entry : map.entrySet())
                    {
                        String columnName = entry.getKey();
                        Object value = entry.getValue();
                        
                        Field field = object.getClass().getDeclaredField(columnName);
                        field.setAccessible(true);
                        field.set(object, value);
                    }
                    resultList.add(object);
                }
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            DBConnector.release(conn, pstmt, rs);
        }
        return resultList;
    }

猜你喜欢

转载自blog.csdn.net/Magic_Engine/article/details/52512193