前天看到冯翔老师给的一道项目实践题:
我们准备建立一个产品检查系统,我们假设有一个产品仓库,仓库里面有很产品,但是这些产品中有一些事废品,因此需要找一些功能来把废品挑选出来。
每个工人开始工作的时候,自动从仓库中随机的挑选一些产品,然后对每个产品进行检查,从中找出废品并贴上标签,然后把产品提条的仓库中,仓库自动的核对工人的工作成果。
OK,以上就是需求了,下面我就用一般项目开发流程来进行开发撒。忘老师指正(大三学生,经验不够)。本次开发的原则是:体现项目开发整体过程。由于项目简单,不使用任何框架。
第一步:用例分析
业务需求功能:
仓库物品管理模块
工人输入一定数目的产品,将请求传给服务器,服务器随机选择指定书目的产品,返回给工人。
进行人工检查后,将不合格产品信息提交给服务器,服务器进行审核,把错误信息返回给工人。
(只有以上两个,为简单起见,没有什么登陆注册)
第二步:数据库设计
画出ER图:很简单,只有一个实体——产品,主码:产品ID,其他属性:产品名,是否合格。
设计表:
CREATE TABLE storehouse
( productId INT(5) PRIMARY KEY,
productName CHAR(20),
isAvaliable CHAR(1)
);
(这里为什么没有给isAvaliable设置为boolean,因为大部分数据库不支持此种类型,MySQL也是如此,我用一个CHAR代替,1表示合格,0表示不合格)
第三步:数据库访问层设计
首先是Bean的设计,由于只有一个实体,所以,只需设计一个Bean
- package com.jackyan.practice.store.bean;
- public class ProductBean {
- private int productId;
- private String productName;
- private char isAvaliable;
- public int getProductId() {
- return productId;
- }
- public void setProductId(int productId) {
- this.productId = productId;
- }
- public String getProductName() {
- return productName;
- }
- public void setProductName(String productName) {
- this.productName = productName;
- }
- public char getIsAvaliable() {
- return isAvaliable;
- }
- public void setIsAvaliable(char isAvaliable) {
- this.isAvaliable = isAvaliable;
- }
- }
接下来,我们设计DAO
- package com.jackyan.practice.store.dao;
- import com.jackyan.practice.store.bean.ProductBean;
- public interface ProductBeanDao {
- public int[] selectAll();
- public ProductBean select(int productId);
- }
紧接着,针对MySQL数据库,我们来实现这个Dao
- package com.jackyan.practice.store.dao.mysql;
- import java.util.List;
- import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
- import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
- import com.jackyan.practice.store.bean.ProductBean;
- import com.jackyan.practice.store.dao.ProductBeanDao;
- import com.jackyan.practice.store.util.Utils;
- public class ProductBeanDaoMysqlImpl implements ProductBeanDao {
- private SimpleJdbcTemplate jdbcTemplate=Utils.getJdbcTemplate();
- @Override
- public int[] selectAll() {
- String sql="SELECT productId FROM storehouse";
- List<ProductBean> l=null;
- l=jdbcTemplate.query(sql,ParameterizedBeanPropertyRowMapper.newInstance(ProductBean.class));
- int[] tem=new int[l.size()];
- for(int i=0;i<tem.length;i++){
- tem[i]=l.get(i).getProductId();
- }
- return tem;
- }
- @Override
- public ProductBean select(int productId) {
- String sql="SELECT productId,productName,isAvaliable FROM storehouse WHERE productId=?";
- List<ProductBean> l=null;
- l=jdbcTemplate.query(sql, ParameterizedBeanPropertyRowMapper.newInstance(ProductBean.class), productId);
- return (l.size()>=1?l.get(0):null);
- }
- }
(我这里使用了spring框架对jdbc进行的封装)