商品項目流程分析

商品項目流程分析

|  流程分析


l  數據庫建立

Create table goods {

 id int auto_increment primary key,

 `name` varchar(50),

 price double,

 count int,

 desc varchar(1000)

}

 

l  源碼結構與頁面建立

 

 

 

 

 

 

|--com.phome.model 封裝項目中使用的具體的數據的包

 --Goods 商品屬性類

|--com.phome.dbhelper 管理數據庫連接,執行sql語句的包

 --ConnectionManager.java  進行數據操作

 --DbHelper.java 操作數據庫的類

|--com.phome.dao 數據訪問對象,負責增刪改查具體的包裝數據包

 --DAO  數據操作的超級接口

|--com.phome.dao.impl 實現數據訪問對象超級接口的包

 --DAO  數據操作的超級接口

|--com.phome.service 業務處理層,負責具體的業務功能邏輯的包

 --Service 業務處理層的超級接口

|--com.phome.service.impl 實現業務處理層的包

 --Service 業務處理層的超級接口

|--com.phome.filter 過濾器包

 --CharacterFilter 過濾器類

|--com.phome.servlet 控制器包

 --GoodsServlet 商品控制器類

|--com.phome.util 用來處理重複出現語句以及一些方法的包

 --FindType

 

|--index 添加商品主頁

|--success 添加商品成功

|--failed 添加商品失敗

l  代碼設計

   * 首先寫操作數據庫的類

ConnectionManager

   public class ConnectionManager {
// 1.加載驅動
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println("數據庫驅動加載失敗..." + e.getMessage());
}
}

// 2.獲取連接
public static Connection getConn() throws SQLException{
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/pxhome" ,"root","root");
return conn;
}

// 3.釋放連接
public static void free(Connection conn){
try {
if(conn != null && !conn.isClosed()){
conn.close();
conn = null;
}
} catch (SQLException e) {
System.err.println("數據庫連接關閉失敗..." + e.getMessage());
}
}
}

   * 其次寫DBHelper

    public class DBHelper {
private Connection conn;
private ResultSet rs;
private PreparedStatement pstat;
/**
* 處理增 ,刪,改語句的方法
* @param conn
* @param sql
* @param objs
* @return
* @throws SQLException 
*/
public int excuteSQL(Connection conn , String sql , Object...objs) throws SQLException{
// 建立預編譯對象
pstat = conn.prepareStatement(sql);
setParameters(objs);
return pstat.executeUpdate();
}

/**
* 處理查詢語句的方法
* @param conn
* @param sql
* @param objs
* @return
* @throws SQLException
*/
public ResultSet excuteQuery(Connection conn , String sql , Object...objs) throws SQLException{
// 創建預編譯對象
pstat = conn.prepareStatement(sql);
setParameters(objs);
rs = pstat.executeQuery();
return rs;
}
// 私有的賦值方法
private void setParameters(Object...objs) throws SQLException{
if(objs != null && objs.length > 0){
for (int i = 0; i < objs.length; i++) {
pstat.setObject(i + 1, objs[i]);
}
}
}
}

   *最後按照以下步驟寫類

1.model

package com.phome.model;
/**
 * 商品的屬性類
 * @author ChenLiYun
 *
 */
public class Goods {
private int id; // 商品編號
private String name; // 商品名稱
private double price; // 商品價格
private int count; // 商品庫存
private String desc; // 商品描述

// 構造方法
public Goods() {
super();
}
public Goods(int id, String name, double price, int count, String desc) {
super();
this.id = id;
this.name = name;
this.price = price;
this.count = count;
this.desc = desc;
}
public Goods(String name, double price, int count, String desc) {
super();
this.name = name;
this.price = price;
this.count = count;
this.desc = desc;
}
// 提供外界訪問的方法
public int getId() {
return id;
}



public void setId(int id) {
this.id = id;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public double getPrice() {
return price;
}


public void setPrice(double price) {
this.price = price;
}


public int getCount() {
return count;
}


public void setCount(int count) {
this.count = count;
}


public String getDesc() {
return desc;
}


public void setDesc(String desc) {
this.desc = desc;
}

2.dao

package com.phome.dao;


import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;


import com.phome.util.FindType;


/**
 * 數據訪問對象的超級接口
 * @author ChenLiYun
 *
 */
public interface DAO<T> {
int add(Connection conn , T t) throws SQLException ;
int delete(Connection conn , int id) throws SQLException ;
int update(Connection conn , T t) throws SQLException ;
List<T> findAll(Connection conn) throws SQLException ;
T findById(Connection conn , int id) throws SQLException ;
List<T> findByCondition(Connection conn , FindType type , Object ... objs) throws SQLException ;
}

3.dao.impl

package com.phome.dao.impl;


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;


import com.phome.dao.DAO;
import com.phome.dbhelper.ConnectionManager;
import com.phome.dbhelper.DBHelper;
import com.phome.model.Goods;
import com.phome.util.FindType;


/**
 * 實現訪問數據的類
 * @author ChenLiYun
 *
 */
public class GoodsDAOImpl implements DAO<Goods>{
private String sql = "";
private ResultSet rs;
private DBHelper dh = new DBHelper();

@Override
public int add(Connection conn, Goods goods) throws SQLException {
// 定義sql語句
sql = "insert into goods(`name`,price,count,`desc`) values(?,?,?,?);";
// 獲取數據庫連接 
conn = ConnectionManager.getConn();
System.out.println(goods.getName() + "/*/*/*/*/*/*/");
// 執行sql語句
int rows = dh.excuteSQL(conn, sql, goods.getName(),
goods.getPrice(),
goods.getCount(),
goods.getDesc());
if(rows > 0){
System.out.println("添加成功");
return rows;
}else{
System.out.println("添加失敗");
return 0;
}

}


@Override
public int delete(Connection conn, int id) throws SQLException {
return 0;
}


@Override
public int update(Connection conn, Goods t) throws SQLException {
return 0;
}


@Override
public List<Goods> findAll(Connection conn) throws SQLException {
return null;
}


@Override
public Goods findById(Connection conn, int id) throws SQLException {
// 定義sql語句
sql = "select * from goods where id=?";
// 獲取連接
conn = ConnectionManager.getConn();
// 執行sql語句
rs = dh.excuteQuery(conn, sql, id);
Goods goods = null;
while(rs.next()){
goods = new Goods();
goods.setId(rs.getInt("id"));
goods.setName(rs.getString("name"));
goods.setPrice(rs.getDouble("price"));
goods.setCount(rs.getInt("count"));
goods.setDesc(rs.getString("desc"));
}
return goods;
}


@Override
public List<Goods> findByCondition(Connection conn, FindType type,
Object... objs) throws SQLException {
return null;
}
}

4.service

package com.phome.service;


import com.phome.model.Goods;


/**
 * 處理業務層的類
 * @author ChenLiYun
 *
 */
public interface GoodsService {
int addGoods(Goods goods);
Goods findById(int id);
}

5.service.impl

package com.phome.service.impl;


import java.sql.Connection;
import java.sql.SQLException;


import com.phome.dao.DAO;
import com.phome.dao.impl.GoodsDAOImpl;
import com.phome.dbhelper.ConnectionManager;
import com.phome.model.Goods;
import com.phome.service.GoodsService;


/**
 * 實現處理業務層的類
 * @author ChenLiYun
 *
 */
public class GoodsServiceImpl implements GoodsService{
private DAO gdi = new GoodsDAOImpl();
private Connection conn;
/**
* 添加商品
*/
@Override
public int addGoods(Goods goods) {

try {
// 獲取連接
conn = ConnectionManager.getConn();
// 調用方法
return gdi.add(conn, goods);
} catch (SQLException e) {
e.printStackTrace();
}finally{
// 關閉連接
ConnectionManager.free(conn);
}
return -1;
}
/**
* 查找商品
*/
@Override
public Goods findById(int id) {
try {
conn = ConnectionManager.getConn();
return (Goods) gdi.findById(conn, id);
} catch (SQLException e) {
e.printStackTrace();
}finally{
// 關閉連接
ConnectionManager.free(conn);
}

return null;
}

}

6.servlet

package com.phome.servlet;


import java.io.IOException;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.phome.model.Goods;
import com.phome.service.GoodsService;
import com.phome.service.impl.GoodsServiceImpl;


/**
 * 商品類型控制器
 * @author ChenLiYun
 *
 */
public class GoodsServlet extends HttpServlet{
private GoodsServiceImpl gsi = new GoodsServiceImpl();

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}


@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 獲取請求中執行的不同的功能
String method = req.getParameter("method");
System.out.println(method + "-------------------");
if ("add".equals(method)) {
add(req, resp);
} else if ("delete".equals(method)) {
delete(req, resp);
}else if ("update".equals(method)) {
update(req, resp);
}else if (method.startsWith("find")) {
find(req, resp);
}
}

// 增加通道
private void add(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 獲取頁面數據
String name = req.getParameter("goodsname");
System.out.println(name + "******");
String price = req.getParameter("goodsprice");
String count = req.getParameter("goodscount");
String desc = req.getParameter("goodsdesc");
System.out.println(desc + "******");
// 創建一個商品對象
Goods goods = new Goods(name , Double.parseDouble(price) , Integer.parseInt(count) , desc);

// 調用業務處理方法,上架商品
int id = gsi.addGoods(goods);

// 根據執行結果跳轉到不同的頁面
if(id == -1) {
resp.sendRedirect("failed.jsp");
} else {
goods = gsi.findById(id);// 根據id獲取到數據庫中的商品
req.setAttribute("currentGoods", goods);// 存放到request空間中
req.getRequestDispatcher("success.jsp").forward(req, resp);
}
}


//刪除
private  void delete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 獲取請求中執行的不同的功能,進行分發
}
//修改
private  void update(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 獲取請求中執行的不同的功能,進行分發
}
//查詢
private  void find(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 獲取請求中執行的不同的功能,進行分發
}

}

7.filter

package com.phome.filter;


import java.io.IOException;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


/**
 * 編碼過濾器
 * @author ChenLiYun
 *
 */
public class CharacterFilter implements Filter{


@Override
public void destroy() {

}


@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("Gb18030");
resp.setContentType("text/html;charset=gb18030");

chain.doFilter(req, resp);
}


@Override
public void init(FilterConfig arg0) throws ServletException {

}

}

8.util

package com.phome.util;
/**
 * 查找類型的枚舉
 * @author ChenLiYun
 *
 */
public class FindType {


}

   *運行方法

首先啓動服務器也就是tomcat後在瀏覽器頁面輸入http://localhost:8080/shopping,回車後出現以下頁面


輸入商品信息後點擊提交按鈕如果添加成功就會跳轉到success.jsp頁面並打印相關商品信息,否則跳轉到添加失敗頁面failed.jsp


數據在數據庫裏的存儲爲


當然按照這種方法進行查找的話只能查找出添加到裏面的一個商品,要想全部顯示數據庫裏的商品信息就得將所查到的信息放到集合中然後在頁面遍歷集合輸出即可,這裏就不寫了,可以由讀者自己完成。

以上就是一個簡單的開發流程,由於我是初學者會有不足道的地方希望大家能提出您寶貴的意見或是建議!微笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章