importjava.lang.reflect.Field;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;importcom.sql.entity.Student;public classSqlSelect1 {private static Logger logger=LogManager.getLogger(SqlSelect1.class.getName());public static List query(Classclazz, String sql, Object... args) {
T entity= null;
//笔者虚拟机默认装的mariadb,建立连接与mysql差不多,连接的封装就不发上来了。
MariaDBConn maria=null;
PreparedStatement pstmt= null;
ResultSet resultSet= null;
List list = new ArrayList();int colLen=0;try{
maria=newMariaDBConn();
pstmt=maria.getConn().prepareStatement(sql);int argsLen=args.length;for (int i = 0; i
pstmt.setObject(i+ 1, args[i]);
}
resultSet=pstmt.executeQuery();
ResultSetMetaData resultSetMetaData=resultSet.getMetaData();//保证集合有序
Map values = new LinkedHashMap();while(resultSet.next()) {//使用随机数使key不重复
double plus=Math.random();
colLen=resultSetMetaData.getColumnCount();for (int i = 0; i
String columnLable=resultSetMetaData
.getColumnLabel(i+ 1);
Object columnValue= resultSet.getObject(i + 1);
values.put(columnLable+plus, columnValue);
}
}if (values.size() > 0) {
Iterator> it =values.entrySet( ).iterator();while(it.hasNext()){int i=0;
entity=clazz.newInstance();while(i
Entry entry=it.next();//剥离随机数,恢复正常key
String fieldName = entry.getKey().toString().split("\\d")[0];
Object value= null;if (entry.getValue() instanceofLong) {
value=Integer.parseInt(entry.getValue().toString());
}else{
value=entry.getValue();
}
Field field=clazz.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(entity, value);
i++;
}
list.add(entity);
}
}
}catch(Exception e) {
logger.error(e);
}finally{try{if(pstmt!=null){
pstmt.close();
}
}catch(SQLException e) {
logger.error(e);
}try{if(resultSet!=null){
resultSet.close();
}
}catch(SQLException e) {
logger.error(e);
}
maria.closeConn();
}returnlist;
}//测试:
public static voidmain(String[] args) {
List list=SqlSelect1.query(Student.class, "select id,name,birthday,gender from students");int size=list.size();for (int i = 0; i < size; i++) {
System.out.println(list.get(i));
}
}
}