美文网首页电商
如果做一个电商系统(一)

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

作者: 唯死撑尔 | 来源:发表于2019-07-23 16:17 被阅读0次

    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文件,指定仓库地址。

    <localRepository>D:\install\maven\maven_repository</localRepository>
    

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

    <mirrors>
    
         <mirror>
    
            <id>alimaven</id>
    
            <name>aliyun maven</name>
    
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    
            <mirrorOf>central</mirrorOf>      
    
        </mirror>
    
    </mirrors>
    
    (5)修改/conf/setting.xml文件,修改jdk版本为1.8
    
    <profiles>
    
        <profile>
    
            <id>jdk-1.8</id>
    
            <activation>
    
                <activeByDefault>true</activeByDefault>
    
                <jdk>1.8</jdk>
    
            </activation>
    
            <properties>
    
                <maven.compiler.source>1.8</maven.compiler.source>
    
                <maven.compiler.target>1.8</maven.compiler.target>
    
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    
            </properties>
    
        </profile>
    
    </profiles>
    

    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文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>cn.gzsxt.ego</groupId>
    
      <artifactId>ego-project</artifactId>
    
      <version>1.0</version>
    
      <packaging>pom</packaging>
    
      <!-- 集中定义依赖版本号 -->
    
        <properties>
    
            <junit.version>4.12</junit.version>
    
            <spring.version>4.3.16.RELEASE</spring.version>
    
            <mybatis.plus.version>2.3</mybatis.plus.version>
    
            <mysql.version>5.1.40</mysql.version>
    
            <slf4j.version>1.6.4</slf4j.version>
    
            <jackson.version>2.9.5</jackson.version>
    
            <druid.version>1.0.9</druid.version>
    
            <httpclient.version>4.3.5</httpclient.version>
    
            <jstl.version>1.2</jstl.version>
    
            <servlet-api.version>2.5</servlet-api.version>
    
            <jsp-api.version>2.0</jsp-api.version>
    
            <joda-time.version>2.5</joda-time.version>
    
            <commons-lang3.version>3.3.2</commons-lang3.version>
    
            <commons-io.version>1.3.2</commons-io.version>
    
            <commons-net.version>3.3</commons-net.version>
    
            <commons-fileupload.version>1.3.1</commons-fileupload.version>
    
            <jedis.version>2.7.2</jedis.version>
    
            <solrj.version>4.10.3</solrj.version>
    
        </properties>
    
        <dependencyManagement>
    
            <dependencies>
    
                <!-- 时间操作组件 -->
    
                <dependency>
    
                    <groupId>joda-time</groupId>
    
                    <artifactId>joda-time</artifactId>
    
                    <version>${joda-time.version}</version>
    
                </dependency>
    
                <!-- Apache工具组件 -->
    
                <dependency>
    
                    <groupId>org.apache.commons</groupId>
    
                    <artifactId>commons-lang3</artifactId>
    
                    <version>${commons-lang3.version}</version>
    
                </dependency>
    
                <dependency>
    
                    <groupId>org.apache.commons</groupId>
    
                    <artifactId>commons-io</artifactId>
    
                    <version>${commons-io.version}</version>
    
                </dependency>
    
                <dependency>
    
                    <groupId>commons-net</groupId>
    
                    <artifactId>commons-net</artifactId>
    
                    <version>${commons-net.version}</version>
    
                </dependency>
    
                <!-- Jackson Json处理工具包 -->
    
                <dependency>
    
                    <groupId>com.fasterxml.jackson.core</groupId>
    
                    <artifactId>jackson-databind</artifactId>
    
                    <version>${jackson.version}</version>
    
                </dependency>
    
                <!-- httpclient -->
    
                <dependency>
    
                    <groupId>org.apache.httpcomponents</groupId>
    
                    <artifactId>httpclient</artifactId>
    
                    <version>${httpclient.version}</version>
    
                </dependency>
    
                <!-- 单元测试 -->
    
                <dependency>
    
                    <groupId>junit</groupId>
    
                    <artifactId>junit</artifactId>
    
                    <version>${junit.version}</version>
    
                    <scope>test</scope>
    
                </dependency>
    
                <!-- 日志处理 -->
    
                <dependency>
    
                    <groupId>org.slf4j</groupId>
    
                    <artifactId>slf4j-log4j12</artifactId>
    
                    <version>${slf4j.version}</version>
    
                </dependency>
    
                <!-- Mybatis -->
    
                <dependency>
    
                    <groupId>com.baomidou</groupId>
    
                    <artifactId>mybatis-plus</artifactId>
    
                    <version>${mybatis.plus.version}</version>
    
                </dependency>
    
                <!-- MySql -->
    
                <dependency>
    
                    <groupId>mysql</groupId>
    
                    <artifactId>mysql-connector-java</artifactId>
    
                    <version>${mysql.version}</version>
    
                </dependency>
    
                <!-- 连接池 -->
    
                <dependency>
    
                    <groupId>com.alibaba</groupId>
    
                    <artifactId>druid</artifactId>
    
                    <version>${druid.version}</version>
    
                </dependency>
    
                <!-- Spring -->
    
                <dependency>
    
                    <groupId>org.springframework</groupId>
    
                    <artifactId>spring-context</artifactId>
    
                    <version>${spring.version}</version>
    
                </dependency>
    
                <dependency>
    
                    <groupId>org.springframework</groupId>
    
                    <artifactId>spring-beans</artifactId>
    
                    <version>${spring.version}</version>
    
                </dependency>
    
                <dependency>
    
                    <groupId>org.springframework</groupId>
    
                    <artifactId>spring-webmvc</artifactId>
    
                    <version>${spring.version}</version>
    
                </dependency>
    
                <dependency>
    
                    <groupId>org.springframework</groupId>
    
                    <artifactId>spring-jdbc</artifactId>
    
                    <version>${spring.version}</version>
    
                </dependency>
    
                <dependency>
    
                    <groupId>org.springframework</groupId>
    
                    <artifactId>spring-aspects</artifactId>
    
                    <version>${spring.version}</version>
    
                </dependency>
    
                <!-- JSP相关 -->
    
                <dependency>
    
                    <groupId>jstl</groupId>
    
                    <artifactId>jstl</artifactId>
    
                    <version>${jstl.version}</version>
    
                </dependency>
    
                <dependency>
    
                    <groupId>javax.servlet</groupId>
    
                    <artifactId>servlet-api</artifactId>
    
                    <version>${servlet-api.version}</version>
    
                    <scope>provided</scope>
    
                </dependency>
    
                <dependency>
    
                    <groupId>javax.servlet</groupId>
    
                    <artifactId>jsp-api</artifactId>
    
                    <version>${jsp-api.version}</version>
    
                    <scope>provided</scope>
    
                </dependency>
    
                <!-- 文件上传组件 -->
    
                <dependency>
    
                    <groupId>commons-fileupload</groupId>
    
                    <artifactId>commons-fileupload</artifactId>
    
                    <version>${commons-fileupload.version}</version>
    
                </dependency>
    
                <!-- Redis客户端 -->
    
                <dependency>
    
                    <groupId>redis.clients</groupId>
    
                    <artifactId>jedis</artifactId>
    
                    <version>${jedis.version}</version>
    
                </dependency>
    
                <!-- solr客户端 -->
    
                <dependency>
    
                    <groupId>org.apache.solr</groupId>
    
                    <artifactId>solr-solrj</artifactId>
    
                    <version>${solrj.version}</version>
    
                </dependency>
    
            </dependencies>
    
        </dependencyManagement>
    
        <build>
    
            <finalName>${project.artifactId}</finalName>
    
            <plugins>
    
                <!-- 资源文件拷贝插件 -->
    
                <plugin>
    
                    <groupId>org.apache.maven.plugins</groupId>
    
                    <artifactId>maven-resources-plugin</artifactId>
    
                    <version>2.7</version>
    
                    <configuration>
    
                        <encoding>UTF-8</encoding>
    
                    </configuration>
    
                </plugin>
    
                <!-- java编译插件 -->
    
                <plugin>
    
                    <groupId>org.apache.maven.plugins</groupId>
    
                    <artifactId>maven-compiler-plugin</artifactId>
    
                    <version>3.2</version>
    
                    <configuration>
    
                        <source>1.8</source>
    
                        <target>1.8</target>
    
                        <encoding>UTF-8</encoding>
    
                    </configuration>
    
                </plugin>
    
            </plugins>
    
            <pluginManagement>
    
                <plugins>
    
                    <!-- 配置Tomcat插件 -->
    
                    <plugin>
    
                        <groupId>org.apache.tomcat.maven</groupId>
    
                        <artifactId>tomcat7-maven-plugin</artifactId>
    
                        <version>2.2</version>
    
                    </plugin>
    
                </plugins>
    
            </pluginManagement>
    
        </build>
    
    </project>
    

    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文件

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd ">
    
    </web-app>
    

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

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
    
      <parent>
    
        <groupId>cn.gzsxt.ego</groupId>
    
        <artifactId>ego-project</artifactId>
    
        <version>1.0</version>
    
      </parent>
    
      <artifactId>ego-manager</artifactId>
    
      <packaging>war</packaging>
    
      <dependencies>
    
              <!-- 添加ego-base依赖 -->
    
            <dependency>
    
                  <groupId>cn.gzsxt.ego</groupId>
    
                <artifactId>ego-base</artifactId>
    
                <version>1.0</version>
    
            </dependency>
    
      </dependencies>
    
    </project>
    

    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文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
    
      <parent>
    
        <groupId>cn.gzsxt.ego</groupId>
    
        <artifactId>ego-project</artifactId>
    
        <version>1.0</version>
    
      </parent>
    
      <artifactId>ego-manager</artifactId>
    
      <packaging>war</packaging>  
    
      <dependencies>
    
              <!-- 添加ego-base依赖 -->
    
            <dependency>
    
                  <groupId>cn.gzsxt.ego</groupId>
    
                <artifactId>ego-base</artifactId>
    
                <version>1.0</version>
    
            </dependency>
    
            <!-- servlet及jsp、jstl依赖 -->
    
              <dependency>
    
                <groupId>jstl</groupId>
    
                <artifactId>jstl</artifactId>
    
            </dependency>
    
            <dependency>
    
                <groupId>javax.servlet</groupId>
    
                <artifactId>servlet-api</artifactId>
    
                <scope>provided</scope>
    
            </dependency>
    
            <dependency>
    
                <groupId>javax.servlet</groupId>
    
                <artifactId>jsp-api</artifactId>
    
                <scope>provided</scope>
    
            </dependency>
    
            <!--
    
                spring最小的pom依赖配置
    
                如果实在记不清,给每一个包单独添加pom也是可行的。
    
             -->
    
                 <!-- spring核心包  4个核心组件+日志包 -->
    
                 <dependency>
    
                <groupId>org.springframework</groupId>
    
                <artifactId>spring-context</artifactId>
    
            </dependency>
    
            <!-- spring-jdbc及事物依赖 -->
    
            <dependency>
    
                <groupId>org.springframework</groupId>
    
                <artifactId>spring-jdbc</artifactId>
    
            </dependency>
    
            <!-- spring切面依赖 -->
    
            <dependency>
    
                <groupId>org.springframework</groupId>
    
                <artifactId>spring-aspects</artifactId>
    
            </dependency>
    
            <!-- springmvc  及  spring-web依赖 -->
    
                 <dependency>
    
                <groupId>org.springframework</groupId>
    
                <artifactId>spring-webmvc</artifactId>
    
            </dependency>
    
    <!-- 导入mybatis相关依赖 -->
    
    <dependency>
    
        <groupId>com.baomidou</groupId>
    
        <artifactId>mybatis-plus</artifactId>
    
    </dependency>        
    
    <!-- mysql连接驱动 -->
    
            <dependency>
    
                <groupId>mysql</groupId>
    
                <artifactId>mysql-connector-java</artifactId>
    
            </dependency>
    
            <!-- 连接池 -->
    
            <dependency>
    
                <groupId>com.alibaba</groupId>
    
                <artifactId>druid</artifactId>
    
            </dependency>
    
      </dependencies>
    
    </project>
    

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

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

    image.png

    4.3第二部分:Spring整合SpringMVC

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

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
        xmlns:context="http://www.springframework.org/schema/context"
    
        xmlns:mvc="http://www.springframework.org/schema/mvc"
    
        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
    
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    
        <!-- 1、开启注解扫描 -->
    
        <context:component-scan base-package="cn.gzsxt.manager"/>
    
        <!-- 2、开启注解驱动 -->
    
        <mvc:annotation-driven/>
    
        <!-- 3、由于jsp存放路径在WEB-INF下面,默认视图解析器解析不到,需要自己配一个视图解析器 -->
    
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    
            <property name="prefix" value="/WEB-INF/jsp/"></property>
    
            <property name="suffix" value=".jsp"></property>
    
        </bean>
    
        <!-- 4、由于css、js都放在了WEB-INF路径下,受保护,需要配置资源映射才可以被访问到 -->
    
        <mvc:resources location="/WEB-INF/js/" mapping="/js/**"></mvc:resources>
    
        <mvc:resources location="/WEB-INF/css/" mapping="/css/**"></mvc:resources>
    
    </beans>
    

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

    修改web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_2_5.xsd ">
    
        <!-- 配置编码过滤器,防止post请求乱码 -->
    
        <filter>
    
                  <filter-name>characterEncodingFilter</filter-name>
    
                  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>              
    
                  <init-param>
    
                      <param-name>encoding</param-name>
    
                      <param-value>utf-8</param-value>
    
                  </init-param>              
    
        </filter>
    
        <filter-mapping>
    
                  <filter-name>characterEncodingFilter</filter-name>
    
                  <url-pattern>/*</url-pattern>
    
    </filter-mapping>
    
        <servlet>
    
            <servlet-name>dispatcherServlet</servlet-name>
    
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        
    
            <init-param>
    
                <param-name>contextConfigLocation</param-name>
    
                <param-value>classpath:spring-*.xml</param-value>
    
            </init-param>
    
            <!-- 项目启动的时候,就加载spring容器 -->
    
            <load-on-startup>1</load-on-startup>
    
        </servlet>
    
        <servlet-mapping>
    
            <servlet-name>dispatcherServlet</servlet-name>
    
            <url-pattern>/</url-pattern>
    
        </servlet-mapping>
    
    </web-app>
    

    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插件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
    
      <parent>
    
        <groupId>cn.gzsxt.ego</groupId>
    
        <artifactId>ego-project</artifactId>
    
        <version>1.0</version>
    
      </parent>
    
      <artifactId>ego-manager</artifactId>
    
      <packaging>war</packaging>  
    
      <build>
    
        <plugins>
    
            <!-- 配置Tomcat插件 -->
    
            <plugin>
    
                <groupId>org.apache.tomcat.maven</groupId>
    
                <artifactId>tomcat7-maven-plugin</artifactId>
    
                <!--
    
                    在插件中,指定项目的访问路径
    
                     指定项目访问的端口
    
                 -->
    
                <configuration>
    
                    <port>8080</port>
    
                    <path>/</path>
    
                    <uriEncoding>UTF-8</uriEncoding>
    
                </configuration>
    
            </plugin>
    
        </plugins>
    
      </build>
    
    </project>
    
    4.3.3.3Step3:重新编译ego-manager项目
    
    [图片上传失败...(image-475a8e-1563872474259)]
    
    ![image.png](https://img.haomeiwen.com/i17397216/7fdce1320e5c758c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    4.3.3.4Step4:启动项目
    
    说明:通过tomcat插件启动项目。
    
    [图片上传失败...(image-32caba-1563872474259)]
    
    ![image.png](https://img.haomeiwen.com/i17397216/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://img.haomeiwen.com/i17397216/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://img.haomeiwen.com/i17397216/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文件
    
    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
        xmlns:aop="http://www.springframework.org/schema/aop"
    
        xmlns:tx="http://www.springframework.org/schema/tx"
    
        xmlns:context="http://www.springframework.org/schema/context"
    
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
    
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    
         <context:property-placeholder file-encoding="utf-8" location="classpath:resource.properties"/>
    
         <!-- 1、创建数据源-->
    
         <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    
             <property name="driverClassName" value="${jdbc.driver}"/>
    
             <property name="url" value="${jdbc.url}"/>
    
             <property name="username" value="${jdbc.username}"/>
    
             <property name="password" value="${jdbc.password}"/>
    
             <!-- 初始化最大连接数 -->
    
             <property name="maxActive" value="10"></property>
    
             <!-- 最小空闲数 -->
    
             <property name="minIdle" value="2"></property>
    
         </bean>
    
         <!-- 2、mybatis-plus整合spring
    
             因为dataSource是交给spring在管理,所有mybatis要使用数据源,就必须整合到spring中。
    
         -->
    
         <!-- MP 提供的 MybatisSqlSessionFactoryBean -->
    
        <bean id="sqlSessionFactoryBean"
    
              class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
    
            <!-- 数据源 -->
    
            <property name="dataSource" ref="dataSource"></property>
    
            <!-- 别名处理 -->
    
            <property name="typeAliasesPackage" value="cn.gzsxt.manager.pojo"></property>
    
            <!-- 自定义mapper.xml存放目录 -->
    
            <property name="mapperLocations" value="classpath:mybatis/*/*.xml"/>
    
            <!-- 注入全局MP策略配置 -->
    
            <property name="globalConfig" ref="globalConfiguration"></property>
    
            <!-- 插件注册 -->
    
            <property name="plugins">
    
                <list>
    
                    <!-- 注册分页插件 -->
    
                    <bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor" />
    
                    <!-- 注入 SQL 性能分析插件,建议在开发环境中使用,可以在控制台查看 SQL 执行日志 -->
    
                    <bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
    
                        <property name="maxTime" value="1000" />
    
                        <!--SQL 是否格式化 默认false-->
    
                        <property name="format" value="true" />
    
                    </bean>
    
                </list>
    
            </property>
    
        </bean>
    
        <!-- 定义 MybatisPlus 的全局策略配置-->
    
        <bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
    
            <!-- 在 2.3 版本以后,dbColumnUnderline 默认值是 true,即pojo属性开启驼峰标识 -->
    
            <property name="dbColumnUnderline" value="true"></property>
    
            <!-- 全局的主键策略 -->
    
            <!--
    
                AUTO->`0`("数据库ID自增")
    
                 INPUT->`1`(用户输入ID")
    
                ID_WORKER->`2`("全局唯一ID")
    
                UUID->`3`("全局唯一ID")
    
            -->
    
            <property name="idType" value="0"></property>
    
            <!-- 全局的表前缀策略配置 -->
    
            <property name="tablePrefix" value="tb_"></property>
    
        </bean>
    
         <!-- 3、配置mybatis,生成动态代理 -->
    
         <bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    
                 <!-- 指定给哪个工厂生成代理 -->
    
                 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
    
                 <!-- 指定接口所在包 -->
    
                 <property name="basePackage" value="cn.gzsxt.manager.mapper"></property>
    
         </bean>
    
         <!-- 4、配置事物管理器 -->
    
         <bean name="tm" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    
                 <property name="dataSource" ref="dataSource"></property>
    
         </bean>
    
         <!-- 5、定义事物的规则 -->
    
         <tx:advice id="tx" transaction-manager="tm">
    
                 <tx:attributes>
    
                     <!-- isolation="DEFAULT" 事物的隔离级别,也叫做READ_COMMINTED
    
                          propagation="REQUIRED"   事物的传播行为
    
                          rollback-for="EXCEPTION"  回滚机制。
    
                                               在service层,如果手动处理了异常,事物不会自动回滚。
    
                               rollback-for="EXCEPTION"作用:在有异常时,强制回滚事物。
    
                      -->
    
                     <tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="EXCEPTION"/>
    
                     <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="EXCEPTION"/>
    
                     <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="EXCEPTION"/>
    
                     <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="EXCEPTION"/>
    
                     <tx:method name="select*" read-only="true"/>
    
                     <tx:method name="get*" read-only="true"/>
    
                     <tx:method name="login*" read-only="true"/>
    
                 </tx:attributes>
    
         </tx:advice>
    
         <!-- 6、定义事物的切面 -->
    
         <aop:config>
    
             <aop:pointcut expression="execution(* cn.gzsxt.manager.service.*.*(..))" id="pointcut"/>
    
             <aop:advisor advice-ref="tx" pointcut-ref="pointcut"/>
    
         </aop:config>
    
    </beans>
    
    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<Item>{
    
    }
    
    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<Item>{
    
    }
    
    (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<ItemMapper, Item> 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://img.haomeiwen.com/i17397216/f695f17e48a4c8cb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    原因:
    
    Springmvc返回json对象时,需要添加jackson依赖。
    
    解决办法:
    
    在ego-manager工程中,修改pom.xml文件,添加Jackson依赖。
    
    <!-- Jackson Json处理工具包 -->
    
    <dependency>
    
            <groupId>com.fasterxml.jackson.core</groupId>
    
            <artifactId>jackson-databind</artifactId>
    
    </dependency>
    
    4.5.3.2测试结果
    
    [图片上传失败...(image-9536a7-1563872474258)]
    
    ![image.png](https://img.haomeiwen.com/i17397216/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://img.haomeiwen.com/i17397216/6b4bdcae2cd4fe53.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    5.2.2第二步:添加mybatis-plus依赖
    
    修改pom.xml文件
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
    
      <parent>
    
        <groupId>cn.gzsxt.ego</groupId>
    
        <artifactId>ego-project</artifactId>
    
        <version>1.0</version>
    
      </parent>
    
      <artifactId>ego-base</artifactId>
    
      <dependencies>
    
            <!-- 导入mybatis-plus相关依赖 -->
    
            <dependency>
    
                <groupId>com.baomidou</groupId>
    
                <artifactId>mybatis-plus</artifactId>
    
            </dependency>
    
      </dependencies>
    
    </project>
    
    5.2.3第三步:修改ego-project工程中pojo、mapper扫描路径
    
    --修改spring-data.xml文件
    
    <!-- 2、mybatis-plus整合spring
    
             因为dataSource是交给spring在管理,所有mybatis要使用数据源,就必须整合到spring中。
    
         -->
    
         <!-- MP 提供的 MybatisSqlSessionFactoryBean -->
    
        <bean id="sqlSessionFactoryBean"
    
              class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
    
            <!-- 数据源 -->
    
            <property name="dataSource" ref="dataSource"></property>
    
            <!-- 别名处理 -->
    
            <property name="typeAliasesPackage" value="cn.gzsxt.base.pojo"></property>
    
            <!-- 注入全局MP策略配置 -->
    
            <property name="globalConfig" ref="globalConfiguration"></property>
    
            <!-- 插件注册 -->
    
            <property name="plugins">
    
                <list>
    
                    <!-- 注册分页插件 -->
    
                    <bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor" />
    
                    <!-- 注入 SQL 性能分析插件,建议在开发环境中使用,可以在控制台查看 SQL 执行日志 -->
    
                    <bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
    
                        <property name="maxTime" value="1000" />
    
                        <!--SQL 是否格式化 默认false-->
    
                        <property name="format" value="true" />
    
                    </bean>
    
                </list>
    
            </property>
    
        </bean>
    
        <!-- 定义 MybatisPlus 的全局策略配置-->
    
        <bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
    
            <!-- 在 2.3 版本以后,dbColumnUnderline 默认值是 true,即pojo属性开启驼峰标识 -->
    
            <property name="dbColumnUnderline" value="true"></property>
    
            <!-- 全局的主键策略 -->
    
            <!--
    
                AUTO->`0`("数据库ID自增")
    
                 INPUT->`1`(用户输入ID")
    
                ID_WORKER->`2`("全局唯一ID")
    
                UUID->`3`("全局唯一ID")
    
            -->
    
            <property name="idType" value="0"></property>
    
            <!-- 全局的表前缀策略配置 -->
    
            <property name="tablePrefix" value="tb_"></property>
    
        </bean>
    
         <!-- 3、配置mybatis,生成动态代理 -->
    
         <bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    
                 <!-- 指定给哪个工厂生成代理 -->
    
                 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
    
                 <!-- 指定接口所在包 -->
    
                 <property name="basePackage" value="cn.gzsxt.base.mapper"></property>
    
         </bean>
    
    重新编译ego-project工程即可!!!
    
    6查询商品列表实现
    
    6.1前端js实现
    
    商品列表使用EasyUI-datagrid插件来加载。
    
    [图片上传失败...(image-8db4d0-1563872474257)]
    
    ![image.png](https://img.haomeiwen.com/i17397216/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:逆向工程生成,不需要开发。
    
    <colgroup><col style="width: 86px;"><col style="width: 317px;"></colgroup>
    | 
    
    请求路径
    
     | 
    
    /item/list
    
     |
    | 
    
    请求方式
    
     | 
    
    Get请求
    
     |
    | 
    
    请求参数
    
     | 
    
    page=1&rows=30 (easyui-datagrid插件规定)
    
     |
    | 
    
    返回值
    
     | 
    
    {total:”2”,rows:List<?>}
    
     |
    
    注意:请求参数在jquery.easyui.min.js中定义,如下图:
    
    [图片上传失败...(image-18c904-1563872474257)]
    
    ![image.png](https://img.haomeiwen.com/i17397216/e2f08b48c623cf67.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    响应值格式,也在jquery.easyui.min.js中定义,如下图:
    
    [图片上传失败...(image-aa3d1d-1563872474257)]
    
    ![image.png](https://img.haomeiwen.com/i17397216/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<Item> page = selectPage(new Page<Item>(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://img.haomeiwen.com/i17397216/ddaeca5d82b09bb7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

    相关文章

      网友评论

        本文标题:如果做一个电商系统(一)

        本文链接:https://www.haomeiwen.com/subject/tolalctx.html