如果做一个电商系统(一)

1如何学习电商系统

做任何的系统,都有一套相对固定的流程。

(1)确定需求

(2)画出原型,制作静态页面。

(3)根据静态页面,画出E-R图,创建数据库。

(4)确定系统架构

(5)确定技术选型

(6)项目组分配任务

(7)确定开发环境,统一版本

(8)开发功能模块

(9)测试

(10)预发布

(11)上线

(12)运维

我们就按照这个流程来学习、开发电商项目。

2开发流程

2.1确定需求

image.png

互联网电商系统的需求,一般从两个方面考虑:并发能力+功能需求。

2.1.1并发能力

所谓的并发,就是单位时间内,同时访问服务器的总次数。

本系统并发需求800-1000次/秒。(实际开发中由甲方客户确定)

2.1.2功能需求

核心功能:

(1)用户访问门户系统,可以搜索、浏览商品,并将商品添加到购物车。

(2)用户通过身份认证之后,可以下订单、支付。

(3)要完成身份认证,必须实现注册登陆功能。

(4)后台系统中,可以实现对商品、订单等的管理。

(5)CMS系统管理门户系统中的内容(商品、广告、链接等)。

2.2画出原型,制作静态页面

2.2.1后台系统页面

2.2.1.1主界面

image.png

2.2.1.2商品模块

(1)商品列表

[图片上传失败...(image-c091c6-1563872349515)]

image.png

(2)商品规格参数列表

image.png

(3)新增商品

--主界面
image.png

--商品类目

image.png

2.2.1.3CMS系统(Content Manager System)

--内容分类管理

image.png

--内容列表

image.png

2.2.2门户系统

(1)用户登陆

image.png

(2)用户注册

image.png

(3)搜索页面

image.png

(4)购物车

image.png

(5)订单页面

image.png

2.3画出E-R图,创建数据库

(1)既然是购物平台,肯定有一张商品表

(2)每一个商品对应一个分类,需要一张商品分类表

(3)每一类商品,都对应一个规格参数的模板。需要一张参数模板表

(4)每一个商品的规格参数值都是不一样的,所以需要一张规格参数值表。

(5)每一个商品都对应有一个详细的描述信息,所以需要一张描述信息表。

目的:将大文本的描述信息抽出来,减小商品表的体积,从而提供商品表的检索效率。

(6)CMS需要一张内容分类表

(7)每一个内容分类,都有一组具体的内容,所以需要一张内容表。

(8)用户要登陆,需要一张用户表

(9)用户下单,需要一张订单表

(10)一个订单中,可以有多个商品,所以需要一张订单项表。

(11)每一个订单都有一个收件地址,需要需要一张收件人表。

image.png

注意:本项目中,数据库已经设计好,将sql文件导入本地数据库即可。

2.4选择系统架构

2.4.1单一系统架构

整个项目只有一个应用,不同的功能模块以包为单位,写在同一个系统中。

image.png

单一系统架构

2.4.2分布式架构

分布式指的是将一个系统拆分成多个不同的子系统,部署到不同的服务器上,系统之间通过接口的形式,相互调用。

image.png

分布式架构

好处:

(1)各系统之间相互独立,以接口相互调用,代码入侵少,耦合度低。

(2)拓展性能好,新增一个功能模块时,只需要将该子系统接入即可。

(3)可以进行灵活的分布式部署和负载均衡实现。

(4)项目组分小组开发子系统,沟通成本低。

劣势:

调用接口的时候,必须开发接口,意味着增加工作量。

2.4.3确定选型后的架构图

image.png

图1-5 易购商城系统架构

核心系统描述:

后台管理系统:

管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能。

前台系统:

用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作。

会员系统:

用户可以在该系统中查询已下的订单、收藏商品、我的优惠券、团购等信息。

订单系统:

提供下单、查询订单、修改订单状态、定时处理订单。

搜索系统:

提供商品的搜索功能。

单点登录系统:

为多个系统之间提供用户登录凭证以及查询登录用户的信息。

2.5技术选型(主要技术)

Spring、SpringMVC、Mybatis-Plus

JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本编辑器)、CSS+DIV

Redis(缓存服务器)

Solr(搜索)

Activemq(消息推送)

Httpclient、jsonp(调用系统服务,系统之间相互调用)

Mysql

tenginx(web服务器)

Linux(项目最终部署的地方)

2.6项目组任务分配

产品经理:2人,确定需求以及给出产品原型图。

项目经理:1人,项目管理。

前端团队:3人,根据产品经理给出的原型制作静态页面。

后端团队:6-8人,实现产品功能。

测试团队:2人,测试所有的功能。

运维团队:2人,项目的发布以及维护。

开发周期6-8个月。

2.7确定开发环境

2.7.1确定jdk版本

--说明:这里我们选择jdk1.8。(先安装jdk1.8)

注意:确定安装的是jdk,而不是jre

[图片上传失败...(image-fe779f-1563872349514)]

image.png

2.7.2安装Maven插件

2.7.2.1第一步:安装maven到本地磁盘

(1)解压Maven安装包

image.png

(2)解压老师提供的Maven仓库。(jar包齐全,不用从中央仓库下载)

image.png

(3)修改/conf/setting.xml文件,指定仓库地址。

D:\install\maven\maven_repository

(4)修改/conf/setting.xml文件,修改中央仓库为阿里云



     

        alimaven

        aliyun maven

        http://maven.aliyun.com/nexus/content/groups/public/

        central      

    



(5)修改/conf/setting.xml文件,修改jdk版本为1.8



    

        jdk-1.8

        

            true

            1.8

        

        

            1.8

            1.8

        1.8

        

    


2.7.2.2第二步:在Eclipse中安装Maven插件

(1)安装maven插件

image.png

(2)添加本地的maven到Eclipse中

image.png

(3)指定默认的Maven插件

image.png

(4)加载Maven的配置setting.xml,更新本地仓库

image.png

2.8功能开发

根据确定之后的需求和任务分配,完成功能模块的开发。

3后台管理系统搭建

3.1后台系统结构

image.png

说明:

(1)ego-project是全局项目,是一个聚合工程,用来管理分布式下的所有子系统。

(2)ego-base是公共组件系统,定义工具类、pojo和mapper等。

(3)ego-manager是后台管理系统,依赖ego-base系统,通过maven坐标引入。

3.2配置步骤说明

(1)创建ego-project聚合系统

(2)创建ego-base公共系统

(3)创建ego-manager后台管理系统

3.3配置步骤

3.3.1第一部分:创建ego-project聚合工程

3.3.1.1第一步:创建项目

使用Maven创建项目(选择pom模型)

image.png

3.3.1.2第二步:集中定义jar、插件版本(锁定版本号)

修改pom.xml文件



  4.0.0

  cn.gzsxt.ego

  ego-project

  1.0

  pom

  

    

        4.12

        4.3.16.RELEASE

        2.3

        5.1.40

        1.6.4

        2.9.5

        1.0.9

        4.3.5

        1.2

        2.5

        2.0

        2.5

        3.3.2

        1.3.2

        3.3

        1.3.1

        2.7.2

        4.10.3

    

    

        

            

            

                joda-time

                joda-time

                ${joda-time.version}

            

            

            

                org.apache.commons

                commons-lang3

                ${commons-lang3.version}

            

            

                org.apache.commons

                commons-io

                ${commons-io.version}

            

            

                commons-net

                commons-net

                ${commons-net.version}

            

            

            

                com.fasterxml.jackson.core

                jackson-databind

                ${jackson.version}

            

            

            

                org.apache.httpcomponents

                httpclient

                ${httpclient.version}

            

            

            

                junit

                junit

                ${junit.version}

                test

            

            

            

                org.slf4j

                slf4j-log4j12

                ${slf4j.version}

            

            

            

                com.baomidou

                mybatis-plus

                ${mybatis.plus.version}

            

            

            

                mysql

                mysql-connector-java

                ${mysql.version}

            

            

            

                com.alibaba

                druid

                ${druid.version}

            

            

            

                org.springframework

                spring-context

                ${spring.version}

            

            

                org.springframework

                spring-beans

                ${spring.version}

            

            

                org.springframework

                spring-webmvc

                ${spring.version}

            

            

                org.springframework

                spring-jdbc

                ${spring.version}

            

            

                org.springframework

                spring-aspects

                ${spring.version}

            

            

            

                jstl

                jstl

                ${jstl.version}

            

            

                javax.servlet

                servlet-api

                ${servlet-api.version}

                provided

            

            

                javax.servlet

                jsp-api

                ${jsp-api.version}

                provided

            

            

            

                commons-fileupload

                commons-fileupload

                ${commons-fileupload.version}

            

            

            

                redis.clients

                jedis

                ${jedis.version}

            

            

            

                org.apache.solr

                solr-solrj

                ${solrj.version}

            

        

    

    

        ${project.artifactId}

        

            

            

                org.apache.maven.plugins

                maven-resources-plugin

                2.7

                

                    UTF-8

                

            

            

            

                org.apache.maven.plugins

                maven-compiler-plugin

                3.2

                

                    1.8

                    1.8

                    UTF-8

                

            

        

        

            

                

                

                    org.apache.tomcat.maven

                    tomcat7-maven-plugin

                    2.2

                

            

        

    


3.3.2第二部分:创建ego-base工程

说明:ego-base是聚合工程中的一个子系统,使用maven module创建

3.3.2.1第一步:创建项目

image.png
image.png
image.png

3.3.3第三部分:创建后台管理系统

3.3.3.1第一步:创建ego-manager(war模型)

(1)使用Maven module创建

image.png

(2)在/WEB-INF/路径下,添加一个web.xml文件






(3)修改pom.xml文件,添加ego-base依赖,通过maven坐标引入



  4.0.0

  

    cn.gzsxt.ego

    ego-project

    1.0

  

  ego-manager

  war

  

          

        

              cn.gzsxt.ego

            ego-base

            1.0

        

  


3.4编译ego-project工程

(1)更新ego-project聚合工程

image.png

(2)安装到本地仓库(maven clean、maven install)

image.png

(3)编译成功

image.png

4ego-manager整合

4.1整合步骤说明

(1)搭建环境。(导包、静态资源+jsp)

(2)Spring整合SpringMVC

(3)Spring整合Mybatis-plus

(4)整合测试

4.2第一部分:搭建环境

4.2.1第一步:导入jar包

(1)导入的包说明:

Spring核心包(4个)

Common-logging日志包

Spring事物+jdbc

Spring切面+AOP

Mybatis-plus核心包

Jdbc驱动+连接池druid

Jsp+servlet+jstl

(2)修改pom.xml文件



  4.0.0

  

    cn.gzsxt.ego

    ego-project

    1.0

  

  ego-manager

  war  

  

          

        

              cn.gzsxt.ego

            ego-base

            1.0

        

        

          

            jstl

            jstl

        

        

            javax.servlet

            servlet-api

            provided

        

        

            javax.servlet

            jsp-api

            provided

        

        

             

             

            org.springframework

            spring-context

        

        

        

            org.springframework

            spring-jdbc

        

        

        

            org.springframework

            spring-aspects

        

        

             

            org.springframework

            spring-webmvc

        





    com.baomidou

    mybatis-plus

        



        

            mysql

            mysql-connector-java

        

        

        

            com.alibaba

            druid

        

  


4.2.2第二步:导入静态资源、jsp页面

说明:静态资源、jsp页面,都放到/WEB-INF/路径下

image.png

4.3第二部分:Spring整合SpringMVC

4.3.1第一步:在src目录下创建spring-mvc.xml文件





    

    

    

    

    

    

        

        

    

    

    

    


4.3.2第二步:配置Springmvc核心控制器

修改web.xml文件





    

    

              characterEncodingFilter

              org.springframework.web.filter.CharacterEncodingFilter              

              

                  encoding

                  utf-8

                            

    

    

              characterEncodingFilter

              /*



    

        dispatcherServlet

    org.springframework.web.servlet.DispatcherServlet        

        

            contextConfigLocation

            classpath:spring-*.xml

        

        

        1

    

    

        dispatcherServlet

        /

    


4.3.3第三步:整合测试

需求:访问后台管理系统首页。

4.3.3.1Step1:创建PageController类

package cn.gzsxt.manager.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

public class PageController {

    @RequestMapping("/")

    public String showIndex(){

        System.out.println("跳转到后台管理系统首页!");

        return "index";

    }

}

4.3.3.2Step2:配置Tomcat插件启动项目

修改ego-manager项目的pom.xml文件,添加tomcat插件



  4.0.0

  

    cn.gzsxt.ego

    ego-project

    1.0

  

  ego-manager

  war  

  

    

        

        

            org.apache.tomcat.maven

            tomcat7-maven-plugin

            

            

                8080

                /

                UTF-8

            

        

    

  



4.3.3.3Step3:重新编译ego-manager项目

[图片上传失败...(image-475a8e-1563872474259)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-7fdce1320e5c758c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4.3.3.4Step4:启动项目

说明:通过tomcat插件启动项目。

[图片上传失败...(image-32caba-1563872474259)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-db46649222cdb641.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4.3.3.5Step5:访问index首页

后台地址:[http://localhost:8080/](http://localhost:8080/)

[图片上传失败...(image-1d4cb2-1563872474259)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-9123c5a54e062957.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

--Spring整合Springmvc成功!!!

4.3.3.6Step6:访问其它页面

(1)修改PageController,使用路径变量绑定要访问页面

package cn.gzsxt.manager.controller;

import javax.swing.plaf.synth.SynthStyle;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

public class PageController {

    @RequestMapping("/")

    public String showIndex(){

        System.out.println("跳转到首页index");

        return "index";

    }

    /**

     * 请求路径格式:  http://localhost:8080/item-list

     * @param page

     * @return

     */

    @RequestMapping("/{page}")

    public String showPage(@PathVariable("page")String page){

        System.out.println("跳转到"+page+".jsp页面");

        return page;

    }

}

--测试:访问添加商品页面

[图片上传失败...(image-83e69a-1563872474259)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-944d6902d2d4bbaf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4.4第三部分: Mybatis-plus整合Spring

思路:

(1)配置数据源

(2)配置会话工厂

(3)配置Mybaits动态代理

(4)配置事物代理

4.4.1第一步:创建resource.properties文件

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/ego

jdbc.username=root

jdbc.password=gzsxt

4.4.2第二步:创建spring-data.xml文件





     

     

     

         

         

         

         

         

         

         

         

     

     

     

    

        

        

        

        

        

        

        

        

        

        

            

                

                

                

                

                    

                    

                    

                

            

        

    

    

    

        

        

        

        

        

        

        

    

     

     

             

             

             

             

     

     

     

             

     

     

     

             

                 

                 

                 

                 

                 

                 

                 

                 

             

     

     

     

         

         

     



4.5第四部分:SSM整合测试

4.5.1需求

根据id查询商品信息。

4.5.2配置步骤

4.5.2.1第一步:创建Item类

package cn.gzsxt.manager.pojo;

import java.util.Date;

import com.baomidou.mybatisplus.annotations.TableField;

import com.baomidou.mybatisplus.annotations.TableId;

import com.baomidou.mybatisplus.annotations.TableName;

import com.baomidou.mybatisplus.enums.IdType;

@TableName(value="tb_item")

public class Item {

    @TableId(value = "id", type = IdType.AUTO)

    private Long id;

    private String title;

    @TableField(value = "sell_point")

    private String sellPoint;

    private long price;

    private int num;

    private String barcode;

    private String image;

    private long cid;

    private byte status;

    private Date created;

    private Date updated;

    public Item() {

        super();

    }

    // 补全get、set方法

}

4.5.2.2第二步:创建ItemMapper接口

package cn.gzsxt.manager.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;

import cn.gzsxt.manager.pojo.Item;

public interface ItemMapper extends BaseMapper{

}

4.5.2.3第三步:创建ItemService接口及其实现类

(1)创建ItemService

package cn.gzsxt.manager.service;

import com.baomidou.mybatisplus.service.IService;

import cn.gzsxt.base.pojo.Item;

import cn.gzsxt.base.vo.EUDataGridResult;

public interface ItemService extends IService{

}

(2)创建ItemServiceImpl类

package cn.gzsxt.manager.service;

import org.springframework.stereotype.Service;

import cn.gzsxt.manager.mapper.ItemMapper;

import cn.gzsxt.manager.pojo.Item;

@Service

public class ItemServiceImpl extends ServiceImpl implements ItemService{

}

4.5.2.4第四步:创建ItremController类

package cn.gzsxt.manager.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import cn.gzsxt.manager.pojo.Item;

import cn.gzsxt.manager.service.ItemService;

@Controller

@RequestMapping("/item")

public class ItemController {

    @Autowired

    private ItemService itemService;

    @RequestMapping("/{id}")

    @ResponseBody

    public Item getById(@PathVariable("id")Long id){

        Item item = itemService.selectById(id);

        return item;

    }

}

4.5.2.5第五步:重新编译项目、安装到本地仓库

4.5.3整合测试

重启项目,浏览器访问地址  [http://localhost:8080/item/](http://localhost:8080/item/) 536563

4.5.3.1碰到的问题及解决办法

(1)json对象转换异常

[图片上传失败...(image-9f77fb-1563872474258)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-f695f17e48a4c8cb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

原因:

Springmvc返回json对象时,需要添加jackson依赖。

解决办法:

在ego-manager工程中,修改pom.xml文件,添加Jackson依赖。





        com.fasterxml.jackson.core

        jackson-databind



4.5.3.2测试结果

[图片上传失败...(image-9536a7-1563872474258)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-4981f88d12c2da85.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

SSM整合成功!!!

5配置ego-base工程

5.1必要性

除了ego-manager系统外,其它的子系统也需要用到pojo、mapper。

因此,在ego-base中创建pojo、mapper,就只需要创建一次了。

5.2配置步骤

配置步骤说明:

     (1)将pojo、mapper复制到ego-base工程对应的包路径下。

     (2)修改ego-manager扫描路径

5.2.1第一步:复制pojo、mapper到ego-base中

[图片上传失败...(image-b3920d-1563872474258)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-6b4bdcae2cd4fe53.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5.2.2第二步:添加mybatis-plus依赖

修改pom.xml文件



  4.0.0

  

    cn.gzsxt.ego

    ego-project

    1.0

  

  ego-base

  

        

        

            com.baomidou

            mybatis-plus

        

  



5.2.3第三步:修改ego-project工程中pojo、mapper扫描路径

--修改spring-data.xml文件



     

    

        

        

        

        

        

        

        

        

            

                

                

                

                

                    

                    

                    

                

            

        

    

    

    

        

        

        

        

        

        

        

    

     

     

             

             

             

             

     

重新编译ego-project工程即可!!!

6查询商品列表实现

6.1前端js实现

商品列表使用EasyUI-datagrid插件来加载。

[图片上传失败...(image-8db4d0-1563872474257)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-bd1427d39dc4b1bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

EasyUI-datagrid插件对返回数据格式要求为:

{total:”2”,rows:[{“id”:”1”,”name”,”张三”},{“id”:”2”,”name”,”李四”}]}

6.2后台java实现

6.2.1代码结构

Controller:接收参数,接收分页信息,响应实体数据

Service:业务处理,分页处理

Mapper:逆向工程生成,不需要开发。


| 

请求路径

 | 

/item/list

 |
| 

请求方式

 | 

Get请求

 |
| 

请求参数

 | 

page=1&rows=30 (easyui-datagrid插件规定)

 |
| 

返回值

 | 

{total:”2”,rows:List}

 |

注意:请求参数在jquery.easyui.min.js中定义,如下图:

[图片上传失败...(image-18c904-1563872474257)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-e2f08b48c623cf67.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

响应值格式,也在jquery.easyui.min.js中定义,如下图:

[图片上传失败...(image-aa3d1d-1563872474257)]

![image.png](https://upload-images.jianshu.io/upload_images/17397216-2e386c4ef3923475.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

6.2.2创建返回结果类型pojo

在ego-base工程中创建。

package cn.gzsxt.base.vo;

import java.util.List;

/**

*

* 自定义EasyUIDateGrid支持的数据结果集

*/

public class EUDataGridResult {

    private long total;

    private List rows;

    public long getTotal() {

        return total;

    }

    public void setTotal(long total) {

        this.total = total;

    }

    public List getRows() {

        return rows;

    }

    public void setRows(List rows) {

        this.rows = rows;

    }

}

6.2.3Service层实现

public EUDataGridResult listAndPage(int curPage,int rows){

EUDataGridResult result = new EUDataGridResult();

    Page page = selectPage(new Page(cpage,rows));

    result.setRows(page.getRecords());

    result.setTotal(page.getTotal());

    return result;

}

###6.2.4controller层实现
@RequestMapping("/list")

@ResponseBody

public EUDataGridResult listAndPage(int page,int rows){

    EUDataGridResult result = itemService.listAndPage(page, rows);

    return result;

}
###6.2.5测试效果,如下图

![image.png](https://upload-images.jianshu.io/upload_images/17397216-ddaeca5d82b09bb7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

你可能感兴趣的:(如果做一个电商系统(一))