// Path: src/main/java/org/easyarch/slardar/binding/FieldBinder.java
// public class FieldBinder<T> {
// 
//     protected static Map<Class<?>,Map<String,String>> fieldMapper = new HashMap<>();
// 
//     private Class<T> cls;
// 
//     public FieldBinder(Class<T> cls){
//         this.cls = cls;
//         init();
//     }
// 
//     /**
//      * 初始化的时候只根据是不是标准实体来初始化（即有没有注解）
//      */
//     private void init(){
//         if (fieldMapper.containsKey(cls)){
//             return;
//         }
//         Field[] fields = cls.getDeclaredFields();
//         Map<String,String> mapper = new HashMap<>();
//         for (Field field : fields){
//             field.setAccessible(true);
//             Column column = field.getAnnotation(Column.class);
//             if (column == null){
//                 mapper.put(field.getName(),field.getName());
//             }else{
//                 mapper.put(column.name(),field.getName());
//             }
//         }
//         fieldMapper.put(cls,mapper);
//     }
// 
//     public void bind(String column,String property){
//         fieldMapper.get(cls).put(column,property);
//     }
// 
//     public void bind(Map<String,String> mapper){
//         fieldMapper.get(cls).putAll(mapper);
//     }
// 
//     public String getProperty(String column){
//         return getProperty(cls,column);
//     }
// 
//     public String getProperty(Class<?> cls,String column){
//         if (fieldMapper.containsKey(cls)){
//             return fieldMapper.get(cls).get(column);
//         }
//         return "";
//     }
// }
// 
// Path: src/main/java/org/easyarch/slardar/jdbc/wrapper/BeanWrapper.java
// public class BeanWrapper<T> extends WrapperAdapter<T> implements Wrapper<T> {
// 
// 
//     public BeanWrapper(FieldBinder fieldBinder) {
//         super(fieldBinder);
//     }
// 
//     @Override
//     public List<T> list(ResultSet rs, Class<T> type) {
//         List<T> list = new CopyOnWriteArrayList<T>();
//         try {
//             ResultSetMetaData meta = rs.getMetaData();
//             while (rs.next()) {
//                 list.add(createBean(rs,meta,type));
//             }
//             return list;
//         } catch (Exception e) {
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     @Override
//     public T bean(ResultSet rs, Class<T> type) {
//         try {
//             ResultSetMetaData meta = rs.getMetaData();
//             if (rs.next()) {
//                 return createBean(rs,meta,type);
//             }
//         } catch (SQLException e) {
//             e.printStackTrace();
//         }
//         return null;
//     }
// 
// 
//     /**
//      * bean生成模块抽取
//      * @param rs
//      * @param meta
//      * @param type
//      * @return
//      */
//     private T createBean(ResultSet rs, ResultSetMetaData meta,Class<T> type) {
//         Object object = ReflectUtils.newInstance(type);
//         try {
//             int count = meta.getColumnCount();
// 
//             for (int i = 0; i < count; i++) {
//                 Object value = rs.getObject(i + 1);
//                 String propertyName = fieldBinder.getProperty(type, meta.getColumnName(i + 1));
//                 if (StringUtils.isEmpty(propertyName)){
//                     ReflectUtils.setFieldValue(object,meta.getColumnName(i + 1), value);
//                 }else{
//                     ReflectUtils.setFieldValue(object,propertyName, value);
//                 }
//             }
//             return (T) object;
//         } catch (SQLException e) {
//             e.printStackTrace();
//             return null;
//         }
//     }
// }
// 
// Path: src/main/java/org/easyarch/slardar/jdbc/wrapper/Wrapper.java
// public interface Wrapper<T>  {
// 
//     public List<T> list(ResultSet rs, Class<T> type);
// 
//     public T bean(ResultSet rs, Class<T> type);
// 
// }


import org.easyarch.slardar.binding.FieldBinder;
import org.easyarch.slardar.jdbc.wrapper.BeanWrapper;
import org.easyarch.slardar.jdbc.wrapper.Wrapper;
import java.sql.ResultSet;
import java.util.List;
package org.easyarch.slardar.jdbc.handler;/**
 * Description : 
 * Created by YangZH on 16-11-3
 *  上午12:00
 */



/**
 * Description :
 * Created by code4j on 16-11-3
 * 上午12:00
 */

public class BeanListResultSetHadler<T> implements ResultSetHandler<List<T>> {

    protected Wrapper<T> wrapper;

// Path: src/main/java/org/easyarch/slardar/binding/FieldBinder.java
// public class FieldBinder<T> {
// 
//     protected static Map<Class<?>,Map<String,String>> fieldMapper = new HashMap<>();
// 
//     private Class<T> cls;
// 
//     public FieldBinder(Class<T> cls){
//         this.cls = cls;
//         init();
//     }
// 
//     /**
//      * 初始化的时候只根据是不是标准实体来初始化（即有没有注解）
//      */
//     private void init(){
//         if (fieldMapper.containsKey(cls)){
//             return;
//         }
//         Field[] fields = cls.getDeclaredFields();
//         Map<String,String> mapper = new HashMap<>();
//         for (Field field : fields){
//             field.setAccessible(true);
//             Column column = field.getAnnotation(Column.class);
//             if (column == null){
//                 mapper.put(field.getName(),field.getName());
//             }else{
//                 mapper.put(column.name(),field.getName());
//             }
//         }
//         fieldMapper.put(cls,mapper);
//     }
// 
//     public void bind(String column,String property){
//         fieldMapper.get(cls).put(column,property);
//     }
// 
//     public void bind(Map<String,String> mapper){
//         fieldMapper.get(cls).putAll(mapper);
//     }
// 
//     public String getProperty(String column){
//         return getProperty(cls,column);
//     }
// 
//     public String getProperty(Class<?> cls,String column){
//         if (fieldMapper.containsKey(cls)){
//             return fieldMapper.get(cls).get(column);
//         }
//         return "";
//     }
// }
// 
// Path: src/main/java/org/easyarch/slardar/jdbc/wrapper/BeanWrapper.java
// public class BeanWrapper<T> extends WrapperAdapter<T> implements Wrapper<T> {
// 
// 
//     public BeanWrapper(FieldBinder fieldBinder) {
//         super(fieldBinder);
//     }
// 
//     @Override
//     public List<T> list(ResultSet rs, Class<T> type) {
//         List<T> list = new CopyOnWriteArrayList<T>();
//         try {
//             ResultSetMetaData meta = rs.getMetaData();
//             while (rs.next()) {
//                 list.add(createBean(rs,meta,type));
//             }
//             return list;
//         } catch (Exception e) {
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     @Override
//     public T bean(ResultSet rs, Class<T> type) {
//         try {
//             ResultSetMetaData meta = rs.getMetaData();
//             if (rs.next()) {
//                 return createBean(rs,meta,type);
//             }
//         } catch (SQLException e) {
//             e.printStackTrace();
//         }
//         return null;
//     }
// 
// 
//     /**
//      * bean生成模块抽取
//      * @param rs
//      * @param meta
//      * @param type
//      * @return
//      */
//     private T createBean(ResultSet rs, ResultSetMetaData meta,Class<T> type) {
//         Object object = ReflectUtils.newInstance(type);
//         try {
//             int count = meta.getColumnCount();
// 
//             for (int i = 0; i < count; i++) {
//                 Object value = rs.getObject(i + 1);
//                 String propertyName = fieldBinder.getProperty(type, meta.getColumnName(i + 1));
//                 if (StringUtils.isEmpty(propertyName)){
//                     ReflectUtils.setFieldValue(object,meta.getColumnName(i + 1), value);
//                 }else{
//                     ReflectUtils.setFieldValue(object,propertyName, value);
//                 }
//             }
//             return (T) object;
//         } catch (SQLException e) {
//             e.printStackTrace();
//             return null;
//         }
//     }
// }
// 
// Path: src/main/java/org/easyarch/slardar/jdbc/wrapper/Wrapper.java
// public interface Wrapper<T>  {
// 
//     public List<T> list(ResultSet rs, Class<T> type);
// 
//     public T bean(ResultSet rs, Class<T> type);
// 
// }


// Path: src/main/java/org/easyarch/slardar/jdbc/handler/BeanListResultSetHadler.java
import org.easyarch.slardar.binding.FieldBinder;
import org.easyarch.slardar.jdbc.wrapper.BeanWrapper;
import org.easyarch.slardar.jdbc.wrapper.Wrapper;
import java.sql.ResultSet;
import java.util.List;

package org.easyarch.slardar.jdbc.handler;/**
 * Description : 
 * Created by YangZH on 16-11-3
 *  上午12:00
 */



/**
 * Description :
 * Created by code4j on 16-11-3
 * 上午12:00
 */

public class BeanListResultSetHadler<T> implements ResultSetHandler<List<T>> {

    protected Wrapper<T> wrapper;

    protected Class<T> type;