package com.rlovep.selfDao; import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import javax.management.Query; import org.apache.commons.beanutils.BeanUtils; import com.rlovep.jdbc.JdbcUtil; /** * * @ClassName: BaseDao * @Description: 通用的dao,自己写的所有的dao都继承此类;有两个方法:更新和查询 * @author peace w_peace@163.com * @date 14 Nov 2015 9:54:38 pm * */ public class BaseDao { // 初始化参数 private Connection con; private PreparedStatement pstmt; private ResultSet rs; /** * * @Title: update * @Description: 更新的通用方法 * @param sql 更新的sql语句(update/insert/delete) * @param paramsValue sql语句中占位符对应的值(如果没有占位符,传入null) * @return:void * @throws * @author peace w_peace@163.com */ public void update(String sql,Object[] paramsValue){ //获取连接 con=JdbcUtil.getConnection(); try { // 创建执行命令的stmt对象 pstmt=con.prepareStatement(sql); // 参数元数据: 得到占位符参数的个数 int count=pstmt.getParameterMetaData().getParameterCount(); // 设置占位符参数的值 if(paramsValue !=null&& paramsValue.length>0){ // 循环给参数赋值 for(int i=1;i<=count;i++){ pstmt.setObject(i, paramsValue[i-1]); } } // 执行更新 pstmt.executeUpdate(); } catch (SQLException e) { throw new RuntimeException(e); }finally { JdbcUtil.close(con, pstmt); } } /** * * @Title: query * @Description: 通用查询方法 * @param sql * @param paramsValue * @param clazz * @return:List<T> * @throws * @author peace w_peace@163.com */ public <T> List<T> query(String sql,Object[] paramsValue,Class<T> clazz){ //返回的集合 List<T>list=new ArrayList<>(); //获得连接 con=JdbcUtil.getConnection(); try { //创建stmt对象 pstmt=con.prepareStatement(sql); //设置占位符 if(paramsValue !=null&& paramsValue.length>0){ for(int i=1;i<=paramsValue.length;i++){ pstmt.setObject(i, paramsValue[i-1]); } } //执行查询 rs=pstmt.executeQuery(); //获得结果元数据 ResultSetMetaData rsmd= rs.getMetaData(); //获得返回的列数 int count=rsmd.getColumnCount(); //将获得的值存到实体 while(rs.next()) { T t=clazz.newInstance(); for(int i=1;i<=count;i++) { //通过元数据获得列植 String name=rsmd.getColumnName(i); Object value=rs.getObject(name); BeanUtils.setProperty(t, name, value); } //添加到list list.add(t); } return list; } catch (SQLException e) { throw new RuntimeException(e); } catch (InstantiationException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); }finally { JdbcUtil.close(con, pstmt,rs); } } }