package com.gw.bookstroe.dao.impl;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.gw.bookstroe.dao.ProductDao;
import com.gw.bookstroe.domain.Order;
import com.gw.bookstroe.domain.OrderItem;
import com.gw.bookstroe.domain.Product;
import com.gw.bookstroe.utils.DataSourceUtils;
public class ProductDaoimpl implements ProductDao {
//0.创建QueryRunner对象
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
//1. 添加商品
@Override
public void addProduct(Product p) throws SQLException{
String sql = "insert into products values(?,?,?,?,?,?,?)";
runner.update(sql, p.getId(), p.getName(), p.getPrice(),
p.getCategory(), p.getPnum(), p.getImgurl(), p.getDescription());
}
// 2.查找所有商品
@Override
public List<Product> listAll() throws SQLException{
String sql = "select * from products";
return runner.query(sql, new BeanListHandler<Product>(Product.class));
}
// 3.根据id查找商品
@Override
public Product findProductById(String id) throws SQLException {
String sql = "select * from products where id=?";
return runner.query(sql, new BeanHandler<Product>(Product.class), id);
}
// 4.多条件查询
@Override
public List<Product> findProductByManyCondition(String id, String name, String category, String minprice,
String maxprice) throws SQLException{
//List<Object>是Object的参数化类型,其引用变量可以接受List,可以添加元素
List<Object> list = new ArrayList<Object>();
//1.构造存在where,但是条件又根据不同情况而不同的
String sql = "select * from products where 1=1 ";
//2.创建sql语句,并拼接sql
if (id != null && id.trim().length() > 0) {
sql += " and id=?";
list.add(id);
}
//2.名字进行模糊查询
if (name != null && name.trim().length() > 0) {
sql += " and name like ?";
list.add("%"+name+"%");
}
if (category != null && category.trim().length() > 0) {
sql += " and category=?";
list.add(category);
}
if (minprice != null && maxprice != null
&& minprice.trim().length() > 0 && maxprice.trim().length() > 0) {
sql += " and price between ? and ?";
list.add(minprice);
list.add(maxprice);
}
//3.把参数放入Object类(集合类)
Object[] params = list.toArray();
return runner.query(sql, new BeanListHandler<Product>(Product.class),
params);
}
// 5.修改商品信息
@Override
public void editProduct(Product p) throws SQLException {
// TODO Auto-generated method stub
//1.创建集合并将商品信息添加到集合中
List<Object> obj = new ArrayList<Object>();
obj.add(p.getName());
obj.add(p.getPrice());
obj.add(p.getCategory());
obj.add(p.getPnum());
obj.add(p.getDescription());
//2.创建sql语句,并拼接sql
String sql = "update products " +
"set name=?,price=?,category=?,pnum=?,description=? ";
//3判断是否有图片
if (p.getImgurl() != null && p.getImgurl().trim().length() > 0) {
sql += " ,imgurl=?";
obj.add(p.getImgurl());
}
//4.注意: where id=?要拼接在最后面
sql += " where id=?";
obj.add(p.getId());
//5.使用QueryRunner对象的update()方法更新数据
runner.update(sql, obj.toArray());
}
//6.后台系统,根据id删除商品信息
@Override
public void deleteProduct(String id) throws SQLException{
String sql = "DELETE FROM products WHERE id = ?";
runner.update(sql, id);
}
// 7.销售榜单
@Override
public List<Object[]> salesList(String year, String month) throws SQLException {
String sql = "SELECT products.name,SUM(orderitem.buynum) AS totalsalnum FROM orders,products,orderItem WHERE orders.id=orderItem.order_id AND products.id=orderItem.product_id AND orders.paystate=1 and year(ordertime)=? and month(ordertime)=? GROUP BY products.name ORDER BY totalsalnum DESC";
return runner.query(sql, new ArrayListHandler(), year, month);
}
//8删除订单时,修改商品数量
@Override
public void updateProductNum(List<OrderItem> items) throws SQLException {
String sql = "update products set pnum=pnum+? where id=?";
Object[][] params = new Object[items.size()][2];
for (int i = 0; i < params.length; i++) {
params[i][0] = items.get(i).getBuynum();
params[i][1] = items.get(i).getP().getId();
}
runner.batch( sql, params);
}
// 9.获取数据总条数
@Override
public int findAllCount(String category) throws SQLException {
String sql = "select count(*) from products";
if (!"全部商品".equals(category)) {
sql += " where category=?";
Long count = (Long) runner.query(sql, new ScalarHandler(), category);
return count.intValue();
} else {
Long count = (Long) runner.query(sql, new ScalarHandler());
return count.intValue();
}
}
//10.获取当前页数据
@Override
public List<Product> findByPage(int currentPage, int currentCount, String category) throws SQLException {
// TODO Auto-generated method stub
// 要执行的sql语句
String sql = null;
// 参数
Object[] obj = null;
// 如果category不为null,代表是按分类查找
if (!"全部商品".equals(category)) {
sql = "select * from products where category=? limit ?,?";
obj = new Object[] { category, (currentPage - 1) * currentCount,
currentCount, };
} else {
sql = "select * from products limit ?,?";
obj = new Object[] { (currentPage - 1) * currentCount,
currentCount, };
}
return runner.query(sql, new BeanListHandler<Product>(Product.class),
obj);
}
// 11.生成订单时,将商品数量减少
@Override
public void changeProductNum(Order order) throws SQLException {
String sql = "update products set pnum=pnum-? where id=?";
List<OrderItem> items = order.getOrderItems();
Object[][] params = new Object[items.size()][2];
for (int i = 0; i < params.length; i++) {
params[i][0] = items.get(i).getBuynum();
params[i][1] = items.get(i).getP().getId();
}
runner.batch(DataSourceUtils.getConnection(), sql, params);
}
//12.前台,用于搜索框根据书名来模糊查询相应的图书
@Override
public List<Product> findBookByName(int currentPage, int currentCount, String searchfield) throws SQLException {
//根据名字模糊查询图书
String sql = "SELECT * FROM products WHERE name LIKE '%"+searchfield+"%' LIMIT ?,?";
return runner.query(sql,new BeanListHandler<Product>(Product.class),currentPage-1,currentCount);
}
//13.前台搜索框,根据书名模糊查询出的图书总数量
@Override
public int findBookByNameAllCount(String searchfield) throws SQLException {
String sql = "SELECT COUNT(*) FROM products WHERE name LIKE '%"+searchfield+"%'";
//查询出满足条件的总数量,为long类型
Long count = (Long)runner.query(sql, new ScalarHandler());
return count.intValue();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于java web晚上书城系统的设计与实现
共425个文件
jpg:116个
gif:109个
class:47个
需积分: 0 17 下载量 74 浏览量
2023-03-04
20:55:12
上传
评论 1
收藏 7.27MB ZIP 举报
温馨提示
项目类型:Java EE项目(java web项目) 项目名称:基于Java web的网上书城(shinebookshop) 当前版本:V1.0.0版本 难度等级:✩✩✩ 复杂程度:✩✩✩✩ 用户类型:双角色(普通用户和管理员) 设计模式:MVC(jsp+servlet+javabean) 项目架构:B/S架构 开发语言:Java语言 主要技术:mvc、jdbc、jsp、bootstrap、html5、css、js、jquery等技术 运行环境:win7/win10/jdk1.8 开发工具:Eclipse 运行工具:Eclipse/MyEclipse,eclipse最兼容 数 据 库:Mysql5.5/5.7/8.0版本 运行服务器:Tomcat6.0/7.0/8.0/8.5/9.0等版本 数据库表数量:7张表 jsp页面数量:32张左右 是否有分页:有分页 是否有代码注释:有注释 是否有idea版本:暂无 是否有课程报告:暂无 是否有相关论文文档:暂无 携带服务:远程调试服务和指导服务(远程调试、问题答疑和指导) 适用场景:课程设
资源推荐
资源详情
资源评论
收起资源包目录
基于java web晚上书城系统的设计与实现 (425个子文件)
pingan.bmp 6KB
hx.bmp 6KB
gf.bmp 6KB
cmb.bmp 6KB
cmbc.bmp 6KB
ccb.bmp 6KB
dy.bmp 6KB
post.bmp 6KB
abc.bmp 6KB
zx.bmp 6KB
bj.bmp 6KB
sfz.bmp 6KB
beijingnongshang.bmp 6KB
cib.bmp 6KB
sh.bmp 6KB
icbc.bmp 6KB
ningbo.bmp 6KB
bcc.bmp 6KB
guangda.bmp 6KB
bh.bmp 6KB
bc.bmp 6KB
shpd.bmp 6KB
nanjing.bmp 6KB
zheshang.bmp 6KB
time.bmp 1KB
ProductDaoimpl.class 8KB
addProduct.class 6KB
EditProductServlet.class 5KB
RegisterFormBean.class 4KB
Productserviceimpl.class 4KB
registerServlet.class 4KB
Order.class 3KB
Product.class 3KB
OrderServiceimpl.class 3KB
DownloadServlet.class 3KB
User.class 3KB
loginservlet.class 3KB
editUserServlet.class 3KB
AddCartServlet.class 3KB
Orderdaoimpl$1.class 3KB
Userdaoimpl.class 3KB
FindProductByManyConditionServlet.class 3KB
OrderItemDaoimpl$1.class 3KB
ChangeCartServlet.class 2KB
FindOrderByUserServlet.class 2KB
ShowProductByPageServlet.class 2KB
FindProductByIdServlet.class 2KB
listProduct.class 2KB
PageBean.class 2KB
FindOrderByIdServlet.class 2KB
AdminPrivilegeFilter.class 2KB
Orderdaoimpl.class 2KB
DelOrderByIdServlet.class 2KB
deleteProduct.class 2KB
OrderItemDaoimpl.class 2KB
PrivilegeTag.class 2KB
DataSourceUtils.class 2KB
YZM.class 2KB
ProductDao.class 1KB
OrderItem.class 1KB
Notice.class 1KB
logoutServlet.class 1KB
Productservice.class 1KB
Userserviceimpl.class 1KB
ShowIndexServlet.class 1KB
OrderService.class 549B
ActiveCodeUtils.class 496B
OrderDao.class 494B
IdUtils.class 463B
OrderItemDao.class 426B
Userservise.class 418B
Userdao.class 406B
.classpath 980B
org.eclipse.wst.common.component 464B
org.eclipse.wst.jsdt.ui.superType.container 49B
main.css 7KB
css.css 3KB
dtree.css 795B
Style.css 671B
left.css 642B
logintitle.gif 16KB
success.gif 8KB
loginbg.gif 5KB
orderbutton.gif 4KB
loginbg.gif 4KB
gif53_030.gif 4KB
logintitle.gif 3KB
buybutton.gif 3KB
buy1.gif 3KB
buy3.gif 3KB
buy2.gif 3KB
signupbutton.gif 3KB
signup.gif 3KB
finalbutton.gif 3KB
botton_gif_025.gif 3KB
productlist.gif 3KB
logo_1.gif 2KB
gif53_029.gif 2KB
billboard.gif 2KB
gwc_jx.gif 2KB
共 425 条
- 1
- 2
- 3
- 4
- 5
资源评论
2301_76524972
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于 Ant 的 Java 项目示例.zip
- 各种字符串相似度和距离算法的实现Levenshtein、Jaro-winkler、n-Gram、Q-Gram、Jaccard index、最长公共子序列编辑距离、余弦相似度…….zip
- 运用python生成的跳跃的爱心
- 包括用 Java 编写的程序 欢迎您在此做出贡献!.zip
- (源码)基于QT框架的学生管理系统.zip
- 功能齐全的 Java Socket.IO 客户端库,兼容 Socket.IO v1.0 及更高版本 .zip
- 功能性 javascript 研讨会 无需任何库(即无需下划线),只需 ES5 .zip
- 分享Java相关的东西 - Java安全漫谈笔记相关内容.zip
- 具有适合 Java 应用程序的顺序定义的 Cloud Native Buildpack.zip
- 网络建设运维资料库职业
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功