1. 第一天
    1. 三个系统
      1. 网站前台
        1. 3.1.1. 网站前台 主要包括网站首页、商家首页、商品详情、搜索、会员中心、订单与支付相关页面、秒杀频道等。
      2. 运营商后台
        1. 3.1.2. 网站后台 运营该电商平台的运营人员的管理后台。 主要包括商家审核、品牌管理、规格 管理、模板管理、商品分类管理、商品审核、广告类型管理、广告管理、订单查 询、商家结算等。
      3. 商家管理后台
        1. 3.1.3. 商家管理后台 加入了该电商平台的商家进行管理的后台,主要功能是对商品的管理以及订单查 询统计、资金结算等功能。
    2. 系统架构
      1. SOA
      2. 架构分析
      3. 数据库表结构
    3. 框架组合
    4. 分布式服务框架 Dubbo
      1. 简介
      2. 架构
      3. 软负载均衡
    5. 注册中心 zookeeper
      1. 简介
    6. Linux
      1. 环境准备
      2. 虚拟机
        1. 启动虚拟机
          1. 如果出现弹出框;那么选择 我已移动该虚拟机
          2. ifconfig
      3. Linux 中安装 zookeeper
        1. tar -zxvf zookeeper-3.4.6.tar.gz
      4. monitor
        1. 上传tomcat与admin
        2. 生成原理(不用做)
    7. IDEA开发环境
    8. 品优购-框架搭建
    9. 创建数据库表
    10. 创建工程&添加依赖
      1. 聚合父工程
        1. 依赖
          1. pom.xml
        2. 包括后续开发的所有品优购聚合子工程。主要功能是进行依赖、插件统一管理。
      2. 通用工具类工程
        1. 放置其它工程经常使用的工具类或者组件。
      3. 实体类工程
        1. 统一放置品优购的所有数据库实体类或者其它领域模型。
        2. 依赖
      4. 数据库通用访问层工程
        1. 放置 Mybatis 中对应于数据库操作的所有 Mapper 接口类。
        2. 依赖
          1. pom.xml
      5. 商家商品服务工程
        1. 该工程主要是对应于商品、商家、品牌、规格、商品分类等的服务提供,由 pinyougou-sellergoods-interface 和 pinyougou-sellergoods-service构成。
        2. pinyougou-sellergoods-interface
          1. <?xml version="1.0" encoding="UTF-8"?> <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"> <parent> <artifactId>pinyougou-sellergoods</artifactId> <groupId>com.pinyougou</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>pinyougou-sellergoods-interface</artifactId> <dependencies> <dependency> <groupId>com.pinyougou</groupId> <artifactId>pinyougou-pojo</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
        3. pinyougou-sellergoods-service
          1. 依赖
          2. pom.xml
      6. pinyougou-manage-web
        1. 依赖
          1. pom.xml
      7. 整合工程
        1. pinyougou-dao
          1. applicationContext-dao.xml
          2. applicationContext-dao.xml
          3. mybatis-config.xml
          4. <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 开启驼峰规则自动映射字段属性值;如字段为 user_name的可以映射到 userName属性中 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>
          5. db.properties
          6. jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.12.168:3306/pinyougoudb?useUnicode=true&characterEncoding=utf8&autoReconnect=true jdbc.username=root jdbc.password=root
          7. log4j.properties
          8. log4j.rootLogger=DEBUG,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
        2. pinyougou-sellergoods-service
          1. applicationContext-service.xml
          2. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:protocol name="dubbo" port="20880"/> <dubbo:application name="pinyougou-sellergoods-service"/> <dubbo:registry address="zookeeper://192.168.12.168:2181"/> <dubbo:annotation package="com.pinyougou.sellergoods.service.impl"/> </beans>
          3. web.xml
          4. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/applicationContext*.xml</param-value> </context-param> </web-app>
        3. pinyougou-manage-web
          1. springmvc.xml
          2. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 引用 dubbo 服务 --> <dubbo:application name="pinyougou-manage-web"/> <dubbo:registry address="zookeeper://192.168.12.168:2181"/> <dubbo:annotation package="com.pinyougou.manage.controller"/> </beans>
          3. log4j.properties
          4. log4j.rootLogger=DEBUG,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
          5. web.xml
          6. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- 解决 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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 指定加载的配置文件 ,通过参数 contextConfigLocation加载 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
        4. 引入品优购实体类
    11. 查询品牌列表数据
      1. 需求分析
        1. 在浏览器上访问:http://localhost:9100/brand/findAll.do 把品牌数据(json 格式字符串)加载并显示
      2. 后端代码
        1. package com.pinyougou.mapper; import com.pinyougou.pojo.TbBrand; import java.util.List; public interface BrandMapper { public List<TbBrand> queryAll(); }
        2. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.pinyougou.mapper.BrandMapper"> <select id="queryAll" resultType="com.pinyougou.pojo.TbBrand"> SELECT * FROM tb_brand </select> </mapper>
        3. package com.pinyougou.sellergoods.service; import com.pinyougou.pojo.TbBrand; import java.util.List; public interface BrandService { public List<TbBrand> queryAll(); }
        4. package com.pinyougou.sellergoods.service.impl; import java.util.List; import com.pinyougou.mapper.BrandMapper; import com.pinyougou.sellergoods.service.BrandService; import org.springframework.beans.factory.annotation.Autowired; import com.alibaba.dubbo.config.annotation.Service; import com.pinyougou.pojo.TbBrand; /** * 注意:该Service注解是alibaba的,不是spring的 */ @Service(interfaceClass = BrandService.class) public class BrandServiceImpl implements BrandService { @Autowired private BrandMapper brandMapper; @Override public List<TbBrand> queryAll() { return brandMapper.queryAll(); } }
        5. package com.pinyougou.manage.controller; import java.util.List; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.alibaba.dubbo.config.annotation.Reference; import com.pinyougou.pojo.TbBrand; import com.pinyougou.sellergoods.service.BrandService; @RestController @RequestMapping("/brand") public class BrandController { @Reference private BrandService brandService; @RequestMapping("/findAll") public List<TbBrand> findAll(){ return brandService.queryAll(); } }
      3. 安装工程
      4. 启动
      5. 测试
        1. 连接虚拟机mysql失败
          1. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'root' WITH GRANT OPTION;
        2. Invalid bound statement (not found):
          1. 没有成功引入mapper.xml文件
          2. 解决方案:在applicationContext-Dao.xml添加这条配置
          3. 9.2. Mybatis 中查询语句找不到 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.RuntimeException: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.pinyougou.mapper.BrandMapper.queryAll org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.pinyougou.mapper.BrandMapper.queryAll 在 IDEA 中检查 resources 文件夹中 com.pinyougou.mapper 是不是已经变成了 一个目录;真正的是三级目录,只是在 IDEA 上看不太出区别。请创建的时候 创建 package 方 式 创 建 则 不 会 出 现 了 ; 不 管 如 何 请 保 证 resources/com/pinyougou/mapper 目录的存在
    12. Git 管理代码