淘淘商城1

第一天:电商行业的背景。淘淘商城的介绍。搭建项目工程。Svn的使用

电商行业的背景

  电商就是把线下的商业模式搬到线上。2014年双11支付宝交易峰值285万笔/分钟,相比去年双11期间79万笔/分钟的交易峰值,系统的支撑能力达到了去年3倍以上

电商特点:并发量大、数据量大

淘淘商城的介绍

电商行业的模式:

B2B:企业到企业,商家到商家,企业间交易。代表:阿里巴巴、慧聪网。bussiness--企业  client--客户

B2C:商家到客户。代表:京东、淘宝商城(B2B2C)。淘宝自己有商城,商家入驻,然后再卖

C2C:客户到客户。代表:淘宝集市。(集市:不需要办牌照,谁都可以卖,入驻淘宝商城必须要能开得出发票)

O2O:线上到线下。类似B2C,只是它线下可以提货也可以网上订购,新概念而已。

淘淘商城的模式

  淘淘网上商城是一个综合性的B2C平台,类似京东商城、天猫商城。会员可以在商城  浏览商品、下订单,以及参加各种活动。(自己采购,自己卖东西,自己配送(当然,成本高))

管理员、运营可以在  平台后台  管理系统中管理商品、订单、会员等。

客服可以在后台管理系统中处理用户的询问以及投诉。(写简历可以写这些)

功能模块

  这是一个B2C的架构,分前台和后台,一个网站并不是都分前台与后台,后台不是必须的,如果没有前台有添加东西需要请自动手非常不方便,我做一个后台让不懂技术的也能管理网站,其实一个商城的后台与传统的项目没有什么区别,只是有一个CMS(管理前台的,这里操作对前台有影响)系统有区别。

功能描述

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

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

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

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

搜索系统:提供商品的搜索功能。

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

传统架构

思考:有什么问题?

1、  模块之间耦合度太高,其中一个升级其他都得升级

2、  开发困难,各个团队开发最后都要整合一起

3、  系统的扩展性差

4、  不能灵活的进行分布式部署。

分布式的架构:把系统按照模块拆分成多个子系统

优点:把模块拆分成独立的工程,单点运行。如果某一个点压力大可以对这一个点单独增加配置。其他的点不受影响。

缺点:1、系统之间交互需要额外的工作量来进行接口的开发。2、把系统拆分成多个工程,要完成系统的工程需要多个工程协作完成。这种形式叫做分布式。(淘宝这10年讲的就是淘宝的架构变化,淘宝用的数据库是mysql,如果老板问mysql行不行,就回答淘宝用mysql,能做得过淘宝,现在也不是说oracle卖不出去了,oracle一般对行业用户,比喻经融行业,银行行业,不在乎钱,用最好的,oracle比mysql性能好很多)

技术选型(主要技术)

 没有一个网站用EasyUI、KindEditor做首页的,都是用来做后台;新浪微博用Redis;很多大的网站都在使用Nginx是一个反向代理工具

开发工具和环境

1.1   人员配置(本项目来自:我友商城)

 

 ----------------------------------------------------------------------------------------干活------------------------------------

//搭建工程,实现分布式架构,而分布式架构又有很多工程

如果像之前一个一个创建web工程,管理很麻烦,各个工程之间的依赖关系都很麻烦 就要使用maven

4、后台管理系统工程搭建

Maven功能

1、依赖管理、jar包、工程之间的依赖。2、项目构建。实现项目的一步构建。3、工程聚合(今天用)、继承、依赖。

Maven的工程类型:

1、war包工程(web工程)2、Jar包工程(java工程)3、Pom工程。(聚合工程,父工程lib有依赖、继承、聚合)

 //在web创建工程之前,在公司内jar包要统一版本,maven插件要统一版本,那么怎么才能统一版本呢?所以要创建一个父工程

父工程的搭建

 父工程(公司级别)应该是一个pom工程。在父工程中定义依赖的jar包的版本信息。Maven插件的版本。我们就不需要版本信息了,只需要groupId和文件版本在父工程中定义了。//新建工程之前,建好仓库

安装本地仓库

使用.m2覆盖本地仓库的内容。(C:\Users\2568833032\.m2)

 

 创建maven工程

 new ---->others---->搜maven---->选maven project(不要点下一步,先钩在下一步,下一步就是选模板了)

 

 

修改pom文件(这样父工程就建好了)

<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>com.taotao</groupId>
  <artifactId>taotao-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
      <!-- 集中定义依赖版本号,其实就是属性,然后在dependencyManagement标签里面会
      引用这些属性,在上面把版本该了,下面的所用功能都得改 -->
    <properties>
        <junit.version>4.12</junit.version>
        <spring.version>4.1.3.RELEASE</spring.version>
        <mybatis.version>3.2.8</mybatis.version>
        <mybatis.spring.version>1.2.2</mybatis.spring.version>
        <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
        <mysql.version>5.1.32</mysql.version>
        <slf4j.version>1.6.4</slf4j.version>
        <jackson.version>2.4.2</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>
        <pagehelper.version>3.4.2-fix</pagehelper.version>
        <jsqlparser.version>0.9.1</jsqlparser.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>
    
  <!-- 只是定义依赖版本号    并不实际依赖 放入dependency里面才是实际依赖,maven那个依赖还没有出来-->
  <dependencyManagement>
      <dependencies>
            <!--    时间操作组件(用这个组件操作时间很简单,不用simpledateformat还要转换了) -->
            <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>
            <!-- net   是通信用的,比喻http服务,我们用ftp服务就会用到这个包里的东西 -->
            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>${commons-net.version}</version>
            </dependency>
<!-- Jackson   Json处理工具包(springMVC中把对象转换成json就用这个我们在springmvc中
发过rest形式的url,url模板映射,返回responsebody。response想用json数据就要jackson
这个包放入工程里面,如果没有这个jackson包就会报406错误) -->
            <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>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <!-- Mybatis整合包-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis.spring.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.miemiedev</groupId>
                <artifactId>mybatis-paginator</artifactId>
                <version>${mybatis.paginator.version}</version>
            </dependency>
            <!-- 分页插件 暂时估计没见过-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>${pagehelper.version}</version>
            </dependency>
            <!-- MySql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- 连接池    这个是druid连接池,这个连接池是阿里开发的连接池之前用dpcp和c3p0-->
            <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编译插件,如果不加这个插件,默认的java编译版本是1.5,现在只要你的工程继承我们
            这个工程,那么它的jdk的版本就会变成1.7-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement><!--只是定义版本,并不实际依赖,和上面dependencyManagement一样 -->
            <plugins>
                <!-- 配置Tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

 //截止目前,后台管理父工程就建好了。现在想:每个工程里边有好多工具类,这些工具类可能不止一个工程能用到,比如文件的处理、图片的处理、上传下载的处理、json与java对象的互相转换,这些可能在所有的项目工程中用到。以前有开发经验的都是在每个项目中建立一个common包,以前是把一个项目里面包里面的东西复制到另一个项目。maven就是管理依赖的,我们可以把common包里面的所有工具类打成一个jar包,让其它的项目都依赖这个jar包,这样就不需要再拷贝了,只要依赖common包即可。我们现在就创建一个工程里面放入一些通用工具类。

4.4创建一个common工程

 也需要继承taotao-parent工程(这个工程在以前就相当于一个装满了工具类的包)

 创建工程

 

taotao-common     Pom.xml文件,略

4.5  后台管理工程创建(管理工程taotao-manager)

1。创建工程,工程搭建

2。修改pom文件,依赖commons工程

3。创建pojo模块。

  首先创建pojo模块,pojo是不依赖其它包的

  怎么创建一个工程的模块呢?  在工程上右键--->new--->other---maven model

 

 在工作空间中taotao-manager-pojo这个项目并没有出现,而是taotao-manager工程的一个文件夹,在ide中只不过是让它显示出来而已,pojo本来就是一个简单java类,所以不必要依赖其它工程,和jar包,所以pom.xml文件不必修改

4.创建taotao-manager-mapper模块

创建方式和创建taotao-manager-pojo相同,然后多了对此模块的pom.xml文件的修改

  pom.xml里面添加了对taotao-manager-pojo的依赖、 mybatis、mybatis-spring整合包、分页插件、mysql驱动、数据库连接池 这些的依赖

5.创建taotao-manager-service模块

创建方式还是相同,对pom.xml的修改如下

6.创建taotao-manager-web模块

创建好了以后,对该web模块的pom.xml进行依赖添加(附:聚合工程中必须要有一个war包)

好了会发现,在pom.xml里面会报错,由于打的是war包,所以缺少web.xml这个文件。有了这个文件后马上就 不报错了,它都不校验文件内容,它只是看有没有这个文件

测试项目工程(怎么也得跑出一个欢迎页出来)

  要运行工程,需要运行聚合工程也就是 taotao-manager,之前的操作是把它部署到server下,现在我们使用maven的tomcat插件,这样就不需要安装tomcat。

  要想运行首先创建一个欢迎页面,欢迎页面首先新建一个index.jsp在taotao-manager-web下的webapp下

要运行taotao-manager需要运行聚合工程-------taotao-manager

Tomcat 插件
在taotao-manager工程的pom文件中添加如下内容

 启动工程

右键--Run As----maven build---在页面中输入maven命令

clean tomcat7:run(说明clean表示把第一次编译清空,然后在运行)
tomcat7 指定使用 tomcat7 的插件 (发现报错了)

他要运行去本地仓库去找taotao-parent,而本地仓库没有(还在我们工程里面,我们还没有安装),现在需要把taotao-parent安装到本地仓库

 此时运行还是会报错,原因就是刚才安装的taotao-parent依赖taotao-common所以要安装taotao-common,然后再次启动

 

Svn的使用

前面把工程搭建完了,下面就要把工程上传至svn上(服务器上),小乌龟是客户端

安装svn,装完了后有一个svn服务

 

 提交代码

项目有键--->tean--->share project--->选svn

 

 

 然后打开Synchronized视图,选择内容提交到服务器

用同样的方法上传

taotao-common(.setting、.project、.classpath全部忽略)

taotao-manager(这个是一个聚合工程,下面有几个工程,导它要一层一层分析)

先上传taotao-manager本身的src src/site pom.xml

由于在服务器端没有taotao-manager-mapper这个文件夹,所以你忽略下面的.setting是无效的

所以你得先把这个文件夹(taotao-manager-mapper,本身上传了后也要忽略本身的)传上去,下面那个serring才可以忽略

然后下面的7个/src都不能忽略,下面的/target都是要忽略的,它是生成的目标文件,编译后的jar包,svn管理的是代码,不是编译的文件

如果以后参加工作了,两个人同时做一个模块,或者修改同一个文件,意思是两个人同时下载一个文件,同时修改然后他修改完了提交了,这个时候服务器版本就比你的版本新了,你也做了一些修改你本地也是新的。这是svn就蒙圈了到底用哪个,他就会显示一个冲突,这个时候你可以更新一下,如果你和你的同伴修改的是文件的不同位置是没有问题的svn会自动合并,如果你们修改的是同一个位置或者离得比较近(svn分不出来),它会把服务器里面与你冲突的代码罗列到你的代码里面有一个箭头标出来,然后你弄一下冲突不再了再提交

删除后导入

 

还得把模块导入到工程里面去  右键--->import--->Maven--->Exist Maven Projects

svn管理

右上方open perspective打开透视图

打开svn资源库,

 

地址:https://DESKTOP-17MCK4C/svn/taotao-javaee16/

用户名:root  密码:123

添加资源库的时候会提示让你输入用户名密码,不要去改这个密码,开发中你改了别人就上不去了,可能你也改不了。也不要修改别人代码,也不要删别人代码,虽然可以删大家都是root也找不出来谁删的。自己弄自己的就可以了

输入用户名和密码后就可以访问了,可以访问了后在branches下面新建远程文件夹,

posted @ 2019-09-14 23:45  键盘小侠  阅读(327)  评论(0编辑  收藏  举报