page是我们的页面当前页码,pageSize是我们每页要查询的条数,tableName是我们指定的表名,Class是我的泛型类用于指定反射,Map用来存储我们的列名和列名要like的值。
切记反射必须要列名一致!
public List<T> selectByPage(int page, int pageSize, String tableName, Class<T> clazz, Map<String,Object> params) throws SQLException, InstantiationException, IllegalAccessException, NoSuchFieldException {
String sql = "select * from " + tableName;
// sql = select * from 表名
int size = params.size();
if(size != 0){
if(size == 1){
for (Map.Entry<String, Object> map : params.entrySet()) {
System.out.println(map.getKey()+"="+map.getValue());
sql += " where " + map.getKey() + " like '%"+ map.getValue()+"%' limit ?,?";
// 现在的sql = select * from 表名字 where 列 like %值%;
System.out.println(sql);
}
}else if(size > 1){
Set<String> set = params.keySet();
sql += " where";
// 当前sql select * from 表名 where
Iterator iterator = set.iterator();
while(iterator.hasNext()){
Object k = iterator.next();
if(iterator.hasNext()==false){
sql+= " "+k+" like"+" '%"+params.get(k)+"%' limit ?,?";
System.out.println(sql);
}else{
sql+=" "+k+" like '%"+params.get(k)+"%' and";
}
}
}
}else{
sql = sql + " limit ?,?";
}
ResultSet rs = executeQuery(sql, new Object[]{(page - 1) * pageSize, pageSize});
int count = rs.getMetaData().getColumnCount(); //获取总列数
List<T> list = new ArrayList<>();
while (rs.next()) { //如果rs的下一行有值
T t = clazz.newInstance();//每一行代表一个对象
for (int i = 1; i <= count; i++) {
String columnName = rs.getMetaData().getColumnName(i); //获取所有表中的
Field propertyName = clazz.getDeclaredField(columnName);//属性名字
propertyName.setAccessible(true); //可以进行赋值
propertyName.set(t, rs.getObject(i));
}
list.add(t);
}
return list; //返回集合封装的数据
}