package com.heima.beanutils;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.converters.DateConverter;
public class MyBeanUtils {
/**Map转bean
* @param clazz
* @param map
* @return
*/
public static Object popular(Class clazz,Map<String,String> map){
Object obj = null;
try {
obj = clazz.newInstance();
BeanUtils.populate(obj, map);
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/**通用查询方法
* @param sql sql语句
* @param params 参数
* @param clazz 对象类型
* @return
*/
public static <T> List<T> query(String sql,Object[] params,Class<T> clazz){
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
List<T> list = new ArrayList<T>();
try {
conn = JdbcUtils.getConn();
pst = conn.prepareStatement(sql);
for(int i=1;i<=params.length;i++){
pst.setObject(i, params[i-1]);
}
rs = pst.executeQuery();
DateConverter converter = new DateConverter();
converter.setPattern(new String("yyyy-MM-dd"));
ConvertUtils.register(converter,Date.class);
ResultSetMetaData rsMD = rs.getMetaData();
int count = rsMD.getColumnCount();
while(rs.next()){
T instance = clazz.newInstance();
for(int i=1;i<=count;i++){
String name = rsMD.getColumnName(i).toLowerCase();
Object value = rs.getObject(i);
if("birthday".equals(value)){
value = "2018-08-01";
}
BeanUtils.setProperty(instance, name, value);
}
list.add(instance);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.release(conn, pst, rs);
}
return list;
}
/**通用更新方法
* @param sql sql语句
* @param params 参数
*/
public static void update(String sql,Object[] params){
Connection conn = null;
PreparedStatement pst = null;
try {
conn = JdbcUtils.getConn();
pst = conn.prepareStatement(sql);
ParameterMetaData parameterMetaData = pst.getParameterMetaData();
int count = parameterMetaData.getParameterCount();
if(count!=params.length){
throw new RuntimeException("参数个数不一致");
}
for(int i=1;i<=count;i++){
pst.setObject(i, params[i-1]);
}
pst.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
}