简易商品页——商品信息展示

实现显示所有商品信息的功能

2.1 确定需求

商品要有类型信息,扩展图片,扩展详细。

2.2 数据库原型

SELECT * FROM goods LEFT JOIN types ON goods_type_id = type_id

2.3 时序图

2.4 类图

1 GoodsService提供一个查询所有商品的方法

    public List<Goods> search();

2 GoodsDAO提供一个查询所有商品的方法

    public List<Goods> select();

2.5 编写实体类

public class Types {

     // type_id int

     private Integer typeId;

     // type_name varchar

     private String typeName;

     // setget方法

public class Goods {

     // goods_id int

     private Integer goodsId;

     // goods_name varchar

     private String goodsName;

     // goods_price double

     private double goodsPrice;

     // goods_num int

     private int goodsNum;

     // goods_img varchar

     private String goodsImg;

     // goods_type_id int

     private Types goodsType;

     // goods_details varchar

     private String goodsDetails;

2.6 编写工具类

将JDBC操作中不变的部分单独进行封装。编写操作数据库连接对象的工具类。

package cn.edu.sut.util;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class ConnUtil {

     private static String FILE_NAME = "mysql5.properties";

     private static ThreadLocal<Connection> LOCAL = new ThreadLocal<>();

     private static DataSource DS;

     static {

          try {

               Properties prop = new Properties();

               InputStream is = ConnUtil.class.getResourceAsStream("/" + FILE_NAME);

               prop.load(is);

               DS = BasicDataSourceFactory.createDataSource(prop);

          } catch (Exception e) {

               e.printStackTrace();

          }

     }

     public static Connection getConn() throws SQLException {

          Connection conn = LOCAL.get();

          if (conn == null || conn.isClosed()) {

               conn = DS.getConnection();

               LOCAL.set(conn);

          }

          return conn;

     }

     public static void closeConn() {

          Connection conn = LOCAL.get();

          try {

               if(conn!=null && ! conn.isClosed()){

                    conn.close();

               }

          } catch (SQLException e) {

               e.printStackTrace();

          } finally{

               LOCAL.set(null);

          }

     }

}

2.7 编写DAO层

DAO : Data Access Object 数据访问对象

封装JDBC操作中,变化的部分。

public interface GoodsDAO {

     public List<Goods> select() throws SQLException;

}

public class GoodsDAOImpl implements GoodsDAO {

     @Override

     public List<Goods> select() throws SQLException {

          List<Goods> goodsList = new ArrayList<Goods>();

          String sql = "SELECT * FROM goods LEFT JOIN types ON goods_type_id = type_id";

          Connection conn = ConnUtil.getConn();

          PreparedStatement pstat = conn.prepareStatement(sql);

          ResultSet rs = pstat.executeQuery();

          while (rs.next()) {

               Goods goods = new Goods();

               goods.setGoodsDetails(rs.getString("goods_details"));

               goods.setGoodsId(rs.getInt("goods_id"));

               goods.setGoodsImg(rs.getString("goods_img"));

               goods.setGoodsName(rs.getString("goods_name"));

               goods.setGoodsNum(rs.getInt("goods_num"));

               goods.setGoodsPrice(rs.getDouble("goods_price"));

              

               Types goodsType = new Types();

               goodsType.setTypeId(rs.getInt("goods_type_id"));

               goodsType.setTypeName(rs.getString("type_name"));

              

               goods.setGoodsType(goodsType);

               goodsList.add(goods);

          }

          return goodsList;

     }

}

2.8 编写Service层

业务层中需要处理:

  1. 异常
  2. 关闭连接
  3. 事务处理

public interface GoodsService {

     public List<Goods> search();

}

public class GoodsServiceImpl implements GoodsService {

     private GoodsDAO goodsDAO = new GoodsDAOImpl();

     @Override

     public List<Goods> search() {

          try {

               return goodsDAO.select();

          } catch (SQLException e) {

               e.printStackTrace();

               throw new RuntimeException(e);

          } finally {

               ConnUtil.closeConn();

          }

     }

}

2.9 编写Controller层

@WebServlet("/goods/search.do")

public class GoodsSearchController extends HttpServlet {

     protected void doGet(HttpServletRequest request, HttpServletResponse response)

               throws ServletException, IOException {

          //1 接收用户请求:获取用户提交的请求参数

          //2 调用业务逻辑:获取业务结果

          GoodsService goodsService = new GoodsServiceImpl();

          List<Goods> goodsList = goodsService.search();

          //3 页面导航:数据传递

          request.setAttribute("goodsList", goodsList);

          request.getRequestDispatcher("/goods/show.jsp").forward(request, response);

     }

     protected void doPost(HttpServletRequest request, HttpServletResponse response)

               throws ServletException, IOException {

          request.setCharacterEncoding("utf-8");

          doGet(request, response);

     }

}

2.10 编写View层

View ---> jsp

JSP : JSTL+EL

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<table width="80%" border="1px" cellpadding="1" cellspacing="0">

     <tr>

          <th>序号</th><th>商品编号</th><th>商品名称</th><th>商品价格</th><th>商品类型</th>

     </tr>

     <c:forEach items="${requestScope.goodsList }var="goods"  varStatus="status">

     <tr>

          <td>${status.count }</td>

          <td>${goods.goodsId}</td>

          <td>${goods.goodsName}</td>

          <td><fmt:formatNumber value="${goods.goodsPrice}"   pattern=".00"  /></td>

          <td>${goods.goodsType.typeName}</td>

     </tr>

     </c:forEach>

</table>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值