文章目录
-
Servlet代码演示
-
package cn.javabs.store.servlet; import cn.javabs.store.entity.Category; import cn.javabs.store.service.CategoryService; import cn.javabs.store.service.impl.CategoryServiceImpl; import com.alibaba.druid.sql.visitor.functions.If; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.swing.text.EditorKit; import java.io.IOException; import java.util.List; /** * 类目的Servlet */ @WebServlet("/categoryServlet") public class CategoryServlet extends HttpServlet { //实例化CategoryService CategoryService categoryService = new CategoryServiceImpl(); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 0.在本方法内部进行分别调用如下分类操作的方法 // ring methodName = "addCategory"; // 去接收index.jsp页面中的methodName参数 String methodName = request.getParameter("methodName"); // 1.如果字符串"addCategory"等于methodName的值(内容) if ("addCategory".equals(methodName)) { addCategory(request, response); // 2.如果字符串"delCategory"等于methodName的值(内容) } else if ("delCategory".equals(methodName)) { delCategory(request, response); // 3.如果字符串"editCategory"等于methodName的值(内容) } else if ("editCategory".equals(methodName)) { editCategory(request, response); // 4.如果字符串"findAllCategories"等于methodName的值(内容) } else if ("findAllCategories".equals(methodName)) { findAllCategories(request, response); } else if ("editCategoryView".equals(methodName)) { editCategoryView(request, response); } // 5.如果methodName的值(内容)没有匹配的方法,则执行下方输入语句 else { System.out.println("哥们,你要的方法不存在,检查是否单词有误!"); } } //------------------------------------------------------------------------------------------------------------------------------------------------------- /** * 查询全部分类 */ public void findAllCategories(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Category> categoryList = categoryService.findAllCategries(); System.out.println(categoryList); request.setAttribute("list", categoryList); //list是一个标记、记号 request.getRequestDispatcher("/categoryList.jsp").forward(request, response); } /** * 根据id指示查询 */ public void findCategoryById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Category category = categoryService.findCategoryById(2); System.out.println("因为index.jsp访问了页面中查询全部的方法,内容:" + category); } /** * 添加分类 */ public void addCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接受前台的参数 String cname = request.getParameter("cname"); Category category = new Category(); category.setCid(null); //因为数据库会自动生成 //category.setCname("内存卡"); //目前的数据是 写死的 不是前台传递过来的 category.setCname(cname); //目前的数据是 写活的 是前台传递过来的cname int rowNumber = categoryService.addCategory(category); if (rowNumber > 0) { System.out.println("插入成功!"); } else { System.out.println("插入失败!"); } } /** * 修改分类 之 数据回显 */ private void editCategoryView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cid = request.getParameter("cid"); int id = Integer.parseInt(cid);//将 "3" 转为 3 Category category = categoryService.findCategoryById(id); // 数据回显 同时显示 所有分类列表 List<Category> categoryList = categoryService.findAllCategries(); if (category != null){ request.setAttribute("data",category); if (categoryList.size()>0 && categoryList != null){ request.setAttribute("list",categoryList); } request.getRequestDispatcher("/categoryList.jsp").forward(request,response) ; }else{ request.setAttribute("data","修改失败"); request.getRequestDispatcher("/message.jsp").forward(request,response); } } /** * 修改分类 */ public void editCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cid = request.getParameter("cid"); String cname = request.getParameter("cname"); int id = Integer.parseInt(cid); Category category = new Category(); category.setCid(id); category.setCname(cname); int rowNumber = categoryService.editCategory(category); if (rowNumber > 0) { System.out.println("修改成功!"); response.getWriter().write("修改成功!");//在页面中显示结果 } else { System.out.println("修改失败!"); } } /** * 删除分类 */ public void delCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cid = request.getParameter("cid"); //cid = 3 int id = Integer.parseInt(cid); // 字符串 转为 整数 int rowNumber = categoryService.delCategory(id); //需要的类型是Integer(int)整数 if (rowNumber > 0) { System.out.println("删除成功!"); } else { System.out.println("删除失败!"); } } }
-
-
商品类的实体类
-
Phone
package cn.javabs.store.entity; public class Phone { private Integer pid; //商品的编号 private String pname; //商品的名称 private String pdescription; //商品描述 private double price; //单价 private Integer stock; //库存 private String photoPath; //图片路径 private String photoName; private Category category; //分类 @Override public String toString() { return "Phone{" + "pid=" + pid + ", pname='" + pname + '\'' + ", pdescription='" + pdescription + '\'' + ", price=" + price + ", stock=" + stock + ", photoPath='" + photoPath + '\'' + ", photoName='" + photoName + '\'' + ", category=" + category + '}'; } public Phone(Integer pid, String pname, String pdescription, double price, Integer stock, String photoPath, String photoName, Category category) { this.pid = pid; this.pname = pname; this.pdescription = pdescription; this.price = price; this.stock = stock; this.photoPath = photoPath; this.photoName = photoName; this.category = category; } public Phone() {super();} public Integer getPid() { return pid;} public void setPid(Integer pid) {this.pid = pid;} public String getPname() {return pname;} public void setPname(String pname) {this.pname = pname;} public String getPdescription() {return pdescription;} public void setPdescription(String pdescription) {this.pdescription = pdescription;} public double getPrice() {return price;} public void setPrice(double price) {this.price = price;} public Integer getStock() {return stock;} public void setStock(Integer stock) { this.stock = stock;} public String getPhotoPath() {return photoPath;} public void setPhotoPath(String photoPath) { this.photoPath = photoPath;} public String getPhotoName() { return photoName;} public void setPhotoName(String photoName) {this.photoName = photoName;} public Category getCategory() {return category;} public void setCategory(Category category) { this.category = category;} }
-
-
设计通用类 Page
-
Page
package cn.javabs.store.commons; import java.util.List; public class Page { private List records; // 查询到的List中的数据 比如说,查询到的前5条数 据 private int totalItems; //总条数 共有多少条 private int currentPage; //当前是第几页 private int totalPage; //共有多少页 private int startIndex; // 开始索引值 private int pageSize = 5; //当前页面有5条数 | 注意: 一般网页有 10 条 private int prePageNum; // 上一页 private int nextPageNum; //下一页 /*------------------有参数的构造方法(totalItems,currentPage)------------------ -----*/ /** * 根据已知的 总条数totalItems 可以推算出 总页数totalPage */ public Page(int totalItems, int currentPage) { this.totalItems = totalItems; this.currentPage = currentPage; // 条件: otalItems % pageSize == 0 // | 满足条件: totalItems / pageSize | 不满 足条件: totalItems / pageSize +1 totalPage = totalItems % pageSize == 0 ? totalItems / pageSize : totalItems / pageSize + 1; startIndex = (currentPage-1)* pageSize; } /*------------------GetterAndSetter方法-----------------------*/ public List getRecords() { return records; } public void setRecords(List records) { this.records = records; } public int getTotalItems() { return totalItems; } public void setTotalItems(int totalItems) { this.totalItems = totalItems; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getStartIndex() { return startIndex; } public void setStartIndex(int startIndex) { this.startIndex = startIndex; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } /** * 获取上一页的页码 */ public int getPrePageNum() { // 判断当前页面是不是第一页 如果是第一页,显示1 如果不是第一页,显示当前页面减一 prePageNum = currentPage - 1 > 0 ? currentPage - 1 : 1; return prePageNum; } public void setPrePageNum(int prePageNum) { this.prePageNum = prePageNum; } /** * 获取下一页的页码 */ public int getNextPageNum() { // 3 = 3+1 >3? 3(满足表达式) : 3+1(不满足表达式) // 3 = 2+1 >3? 3(满足表达式) : 2+1(不满足表达式) // 2 = 1+1 >3? 3(满足表达式) : 1+1(不满足表达式) nextPageNum = currentPage + 1 > totalPage ? totalPage : currentPage+ 1 ; return nextPageNum; } public void setNextPageNum(int nextPageNum) { this.nextPageNum = nextPageNum; } }
-
-
商品的数据访问层接口设计 dao
-
PhoneDao
package cn.javabs.store.dao; import cn.javabs.store.entity.Phone; import java.util.List; public interface PhoneDao { //添加商品 int add(Phone phone); //删除商品 int del(Integer pid); //修改商品 int update(Phone phone); // 指定id查询 Phone findById(Integer pid); //查询所有商品 List<Phone> findAll(int startIndex , int pageSize); //查询总记录条数(数据库共有几条数据) int findTotalItems(); }
-
-
商品的数据访问层接口的实现类设计 dao.impl
-
PhoneDaoImpl
package cn.javabs.store.dao.impl; import cn.javabs.store.dao.PhoneDao; import cn.javabs.store.entity.Phone; import cn.javabs.store.util.DruidUtil; 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 java.sql.SQLException; import java.util.List; /** * 商品的Dao接口的impl实现类设计 */ public class PhoneDaoImpl implements PhoneDao { // 增删改:采用update方法 | 查 :采用query方法 QueryRunner qr = new QueryRunner(DruidUtil.getDataSource()); /** * 添加商品 */ @Override public int add(Phone phone) { int number = 0; try { number = qr.update("insert into phone(pid,pname,pdescription,price,stock,photoPath,photoName,cid)" +"values(null,?,?,?,?,?,?,?)", phone.getPid(), phone.getPname(), phone.getPdescription(), phone.getPrice(), phone.getStock(), phone.getPhotoPath(), phone.getPhotoName(), phone.getCategory().getCid() ); return number; } catch (SQLException e) { throw new RuntimeException(e); } } /** * 删除商品 */ @Override public int del(Integer pid) { try { int number = qr.update("delete from phone where pid = ?",pid); return number; } catch (SQLException e) { throw new RuntimeException(e); } } /** * 修改商品 */ @Override public int update(Phone phone) { int number = 0; try { number = qr.update("update phone set pname=?,pdescription=?,price=?,stock=?,photoPath=?,photoName=?,cid=? where pic=?", phone.getPname(), phone.getPdescription(), phone.getPrice(), phone.getStock(), phone.getPhotoPath(), phone.getPhotoName(), phone.getCategory().getCid(), phone.getPid() ); return number; } catch (SQLException e) { throw new RuntimeException(e); } } /** * 根据指定查询 */ @Override public Phone findById(Integer pid) { // 第一种写法: 拆解法 // Class tel = Phone.class; // ResultSetHandler rsh = new BeanHandler(tel); // Phone phone = (Phone) queryRunner.query("select * from phone where pid=?",rsh,pid); // 第二种写法: 合并法 Phone phone = null; try { phone = qr.query("select * from phone where pid=?",new BeanHandler<>(Phone.class),pid); return phone; } catch (SQLException e) { throw new RuntimeException(e); } } /** * 查询所有商品(参数有两个) */ @Override public List<Phone> findAll(int startIndex, int pageSize) { try { List<Phone> list = qr.query("select * from phone limit ?,?",new BeanListHandler<>(Phone.class), startIndex,pageSize); return list; } catch (SQLException e) { throw new RuntimeException(e); } } /** * 查询总记录条数(数据库共有几条数据) */ @Override public int findTotalItems() { long longNumber = 0; try { longNumber = qr.query("select count(*) from phone",new ScalarHandler<>(1)); int number = longNumber.intValue(); return number; } catch (SQLException e) { throw new RuntimeException(e); } } }
-
-
商品的业务逻辑层接口设计 service
-
PhoneService
package cn.javabs.store.service; import cn.javabs.store.commons.Page; import cn.javabs.store.entity.Phone; public interface PhoneService { //查询全部 Page findAllPhones(String pageNum); //根据商品的编号查询商品 Phone findPhoneByPid(Integer pid); //添加商品 int addPhone(Phone phone); //修改商品 int editPhone(Phone phone); //删除商品 int delPhone(Integer pid); }
-
-
商品的业务逻辑层接口的实现类设计 service.impl
-
PhoneServiceImpl
package cn.javabs.store.service.impl; import cn.javabs.store.commons.Page; import cn.javabs.store.dao.PhoneDao; import cn.javabs.store.entity.Phone; import cn.javabs.store.service.PhoneService; /** * 商品的service接口的实现类设计 */ public class PhoneServiceImpl implements PhoneService { /** * 查询全部 */ @Override public Page findAllPhones(String pageNum) { return null; } /** * 根据商品的编号查询商品 */ @Override public Phone findPhoneByPid(Integer pid) { return null; } /** * 添加商品 */ @Override public int addPhone(Phone phone) { return 0; } /** * 修改商品 */ @Override public int editPhone(Phone phone) { return 0; } /** * 删除商品 */ @Override public int delPhone(Integer pid) { return 0; } }
-