JdbcTemplate的DQL操作升级

新建一个handler包,定义处理器的接口

//结果集处理器,规范处理结果集的方法名称
public interface ResultSetHandler<T>{
	T handle(ResultSet rs) throws Exception;
}

T作为一种未知类型,表示处理完结果集,最后结果集就是该类型,类型由该方法的调用者决定

在DAOImpl类中,实现上述接口

//把结果集中的每一行数据封装成Product对象
	class ProductResultHandler implements ResultSetHandler<List<Product>>{

		public List<Product> handle(ResultSet rs) throws Exception {
			
			List<Product> list=new ArrayList<Product>();
			while(rs.next()) {
				Product pro=new Product();
				pro.setId(rs.getLong("id"));
				pro.setProductName(rs.getString("productName"));
				pro.setBrand(rs.getString("brand"));
				pro.setSupplier(rs.getString("supplier"));
				pro.setSalePrice(rs.getBigDecimal("salePrice"));
				pro.setCostPrice(rs.getBigDecimal("costPrice"));
				pro.setCutoff(rs.getDouble("cutoff"));
				pro.setDir_id(rs.getLong("dir_id"));
				list.add(pro);
			}
			return list;
		}
		
	}
public List<Product> list() {
	return JdbcTemplate.query("select * from product",new ProductResultHandler());	
}

JdbcTemplate中,

public static <T>T query(String sql,ResultSetHandler<T> rsh,Object...params){
		List<Product> list=new ArrayList<>();
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			conn=DruidUtil.getConn();
			ps=conn.prepareStatement(sql);
			//设置占位符
			for(int index=0;index<params.length;index++) {
				ps.setObject(index+1, params[index]);
			}
			rs=ps.executeQuery();
			return rsh.handle(rs);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DruidUtil.close(rs, ps, conn);
		}
		throw new RuntimeException("查询出错");
	}


猜你喜欢

转载自blog.csdn.net/weixin_36328444/article/details/80402240