文章目錄
-
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; } }
-