package com.rlovep.dao.impl; import java.util.ArrayList; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import com.rlovep.dao.IFoodDao; import com.rlovep.entity.Food; import com.rlovep.utils.Condition; import com.rlovep.utils.JdbcUtils; import com.rlovep.utils.PageBean; public class FoodDao implements IFoodDao{ private QueryRunner qr = JdbcUtils.getQuerrRunner(); @Override public void add(Food food) { String sql =" INSERT food(foodName,foodType_id,price,mprice,remark,img) VALUES(?,?,?,?,?,?);"; try { qr.update(sql, food.getFoodName(),food.getFoodType_id(), food.getPrice(),food.getMprice(),food.getRemark(),food.getImg()); } catch (Exception e) { throw new RuntimeException(e); } } @Override public void delete(int id) { try { String sql ="DELETE FROM food WHERE id=?"; qr.update(sql,id); } catch (Exception e) { throw new RuntimeException(e); } } @Override public void updata(Food food) { try { String sql ="UPDATE food SET foodName=?,foodType_id=?,price=?,mprice=?,remark=?,img=? WHERE id =?"; qr.update(sql,food.getFoodName(),food.getFoodType_id(),food.getPrice(), food.getMprice(),food.getRemark(),food.getImg(),food.getId()); } catch (Exception e) { throw new RuntimeException(e); } } @Override public List<Food> query() { try { String sql ="SELECT * FROM food"; return qr.query(sql,new BeanListHandler<Food>(Food.class)); } catch (Exception e) { throw new RuntimeException(e); } } @Override public Food findById(int id) { try { String sql ="SELECT * FROM food where id =?"; return qr.query(sql,new BeanHandler<Food>(Food.class), id); } catch (Exception e) { throw new RuntimeException(e); } } @Override public List<Food> query(String keyword) { try { String sql ="SELECT * FROM food WHERE foodName LIKE ?"; return qr.query(sql,new BeanListHandler<Food>(Food.class) , "%"+keyword+"%"); } catch (Exception e) { throw new RuntimeException(e); } } @Override public List<Food> findByType(int type) { try { //根据食物类型找到食物 String sql ="SELECT * FROM food WHERE foodType_id =?"; return qr.query(sql, new BeanListHandler<Food>(Food.class), type); } catch (Exception e) { throw new RuntimeException(e); } } @Override public void getAll(PageBean<Food> pb) { //2. 查询总记录数; 设置到pb对象中 int totalCount = this.getTotalCount(pb); pb.setTotalCount(totalCount); List<Object> list = new ArrayList<Object>(); /* * 问题: jsp页面,如果当前页为首页,再点击上一页报错! * 如果当前页为末页,再点下一页显示有问题! * 解决: * 1. 如果当前页 <= 0; 当前页设置当前页为1; * 2. 如果当前页 > 最大页数; 当前页设置为最大页数 */ // 判断 if (pb.getCurrentPage() <=0) { pb.setCurrentPage(1); // 把当前页设置为1 } else if (pb.getCurrentPage() > pb.getTotalPage()){ pb.setCurrentPage(pb.getTotalPage()); // 把当前页设置为最大页数 } //1. 获取当前页: 计算查询的起始行、返回的行数 int currentPage = pb.getCurrentPage(); int index = (currentPage -1 ) * pb.getPageCount(); // 查询的起始行 int count = pb.getPageCount(); // 查询返回的行数 Condition condition = pb.getCondition(); //3. 分页查询数据; 把查询到的数据设置到pb对象中 //String sql = "select * from food limit ?,?"; StringBuilder sb = new StringBuilder(); sb.append(" SELECT"); sb.append(" f.id,"); sb.append(" f.foodName,"); sb.append(" f.foodType_id,"); sb.append(" f.price,"); sb.append(" f.mprice,"); sb.append(" f.remark,"); sb.append(" f.img,"); sb.append(" ft.typeName"); sb.append(" FROM "); sb.append(" food f,"); sb.append(" foodType ft"); sb.append(" WHERE 1=1 "); sb.append(" AND f.foodType_id=ft.id"); //判断 if(condition!=null){ String foodName = condition.getFoodName(); if(foodName!=null && !foodName.isEmpty()){ sb.append(" AND f.foodName LIKE ? "); list.add("%"+foodName+"%"); } int type_id = condition.getFoodType_id(); if(type_id>0){ sb.append(" AND f.foodType_id=? "); list.add(type_id); } } sb.append(" limit ?,? "); list.add(index); list.add(count); try { // 根据当前页,查询当前页数据(一页数据) if(index>=0){ List<Food> pageData = qr.query(sb.toString(), new BeanListHandler<Food>(Food.class), list.toArray()); // 设置到pb对象中 pb.setPageData(pageData); } } catch (Exception e) { throw new RuntimeException(e); } } @Override public int getTotalCount(PageBean<Food> pb) { StringBuilder sb=new StringBuilder(); List<Object> list=new ArrayList<>(); sb.append("select count(*) from food ,foodType where 1=1 and food.foodType_id=foodType.id "); Condition condition=pb.getCondition(); if(condition!=null) { String foodName=condition.getFoodName(); if(foodName!=null&&!foodName.isEmpty()){ sb.append(" And food.foodName like ?"); list.add("%"+foodName+"%"); } int type_id=condition.getFoodType_id(); if(type_id>0){ sb.append(" And foodType_id=?"); list.add(type_id); } } try { Long count = qr.query(sb.toString(), new ScalarHandler<Long>(),list.toArray()); return count.intValue(); } catch (Exception e) { throw new RuntimeException(e); } } }