# 品优购(IDEA版)-第一天
品优购IDEA版应该是2019年的新项目。目前只有视频。资料其他都还是旧的。

## 1.学习目标

1:了解电商行业特点以及理解电商的模式
2:了解整体品优购的架构特点
3:能够运用 Dubbo+SSM 搭建分布式应用
4:搭建工程框架,完成品牌列表后端代码

## 2. 电商概述

## 3. 品优购需求分析与设计

### 3.1. 品优购简介

品优购商城主要分为网站前台、网站后台、商家后台三类系统。

#### 3.1.1. 网站前台
主要包括网站首页、商家首页、商品详情、搜索、会员中心、订单与支付相关页面、秒杀频道等。
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021804323-1727543117.png)
#### 3.1.2. 网站后台
运营该电商平台的运营人员的管理后台。 主要包括商家审核、品牌管理、规格管理、模板管理、商品分类管理、商品审核、广告类型管理、广告管理、订单查询、商家结算等。

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021806534-1852194779.png)
#### 3.1.3. 商家管理后台
加入了该电商平台的商家进行管理的后台,主要功能是对商品的管理以及订单查询统计、资金结算等功能。

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021807323-2104969555.png)

### 3.2. 系统架构
#### 3.2.1. SOA 架构
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021808525-1344838294.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021810124-426448035.png)
#### 3.2.2. 品优购架构分析
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021813807-1895847264.png)
### 3.3. 数据库表结构
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021815213-1564421922.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021815504-942879080.png)
### 3.4. 项目框架
品优购采用当前流行的前后端分离架构。后端框架采用 Spring + Spring MVC +
Mybatis +Dubbo。前端采用 angularJS + Bootstrap。

## 4. 分布式服务框架 Dubbo
### 4.1. DUBBO 简介

> DUBBO 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服 务调用方案,是阿里巴巴
> SOA(Service-Oriented Architecture,SOA,面向服务架构) 服务化治理方案的核心框架,每天为
> 2,000+个服务提供 3,000,000,000+次访问量
> 支持,并被广泛应用于阿里巴巴集团的各成员站点。官网地址:http://dubbo.io/

#### 4.1.1 DUBBO 架构
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021819107-1115034300.png)
**节点角色说明:**
| 英文名 | 节点角色说明 |
|--|--|
| Provider |暴露服务的服务提供方。 |
| Consumer|调用远程服务的服务消费方。 |
| Registry|服务注册与发现的注册中心。 |
| Monitor|统计服务的调用次调和调用时间的监控中心。 |
| Container|服务运行容器。 |

**调用关系说明:**

0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长
连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行
调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一
次统计数据到监控中心。

> 【软负载均衡】软件负载均衡则是通过在服务器上安装的特定的负载均衡软件或是自带负载均衡模块完成对请求的分配派发。如:轮询法、随机法、源地址哈希 法、最小连接数法等。在消费方中声明服务的时候可以指定负载均衡的策略, dubbo 在返回的服务地址列表中使用负载均衡策略选择一个服务地址;默认是使 用随机法。

### 4.2. 注册中心 zookeeper
#### 4.2.1. zookeeper 简介
官方推荐使用 zookeeper 注册中心。注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。

zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境。

zooKeeper 用来做 dubbo 的注册中心,也即哪一个服务由哪一台机器来提供
必需让调用者知道,简单来说就是 ip 地址和服务名称的对应关系。

#### 4.2.2. 准备 Linux 环境
导入的虚拟机必须设置 ip 为 192.168.25.168 才可以使用 FastDFS(后面的课程会
用);如果虚拟机不是 25 网段,需要手动设置网段,设置方式如下图:

> 因为除了只有视频是新的,软件资源其实都还是旧的,所以其实是需要使用25网段

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021819379-62191433.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021820646-1843338806.png)
#### 4.2.3. VMWare 中打开虚拟机
找到下发的虚拟机文件夹“pinyougou”;导入 VMWare 内,步骤如下:
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021822829-28214865.png)
如果出现弹出框;那么选择 我已移动该虚拟机

#### 4.2.4. 启动虚拟机
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021824873-1566105583.png)
上述安装的 CentOS7 64 位系统;
帐号:root,密码:itcast

【注意】如果启动后无法在 windows 中使用工具连接(systemctl start
network.service 命令可以查看状态);那么可以在 centos 中重启网络;输入如下
命令:
systemctl stop NetworkManager
systemctl restart network.service

进入桌面后,右击进入terminal输入ifconfig,查看ip
```powershell
ifconfig
```
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021830793-613657459.png)
#### 4.2.5. Linux 中安装 zookeeper
将zookeeper-3.4.6.tar.gz上传到服务器的/root/目录下
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021839184-13239202.png)
解压
```powershell
tar -zxvf zookeeper-3.4.6.tar.gz
```

进入zookeeper-3.4.6目录。创建data文件夹
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021844635-70860871.png)
进入conf(配置)文件夹,重命名zoo_sample.cfg为zoo.cfg。修改zoo.cfg文件。
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021847654-36323519.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021849359-42801003.png)
进入bin文件夹,启动zookeeper
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021853412-688188487.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021855709-1552270679.png)

### 4.3. 监控中心 Monitor
在开发时,需要知道注册中心都注册了哪些服务,以便我们开发和测试。可以通过部署一个监控中心来实现。其实监控中心就是一个 web 应用,部署到tomcat 即可。

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021856686-1920506620.png)
上传tomcat与dubbo-admin到服务器
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021857890-978397469.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021859669-334470613.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021901973-2090646508.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021904203-1963640408.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021906319-156981779.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021908671-1605953602.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021909118-2068059511.png)
## 5. IDEA 开发环境设置
### 5.1. 创建 IDEA 工程
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021909791-2139768819.png)
或者
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021913831-1184820838.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021915122-1747546429.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021916435-500605774.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021918335-1923527305.png)

## 6. 品优购-框架搭建
### 6.1. 工程结构说明
开发完成后的工程结构如下:

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021923049-451565335.png)
| 模块名 |工程说明 |
|--|--|
|pinyougou-parent | 聚合父工程 |
|pinyougou-pojo | 通用实体类 |
|pinyougou-dao | 通用实体类 |
|pinyougou-xxx | 业务服务层工程 |
|pinyougou-xxx-interface | 业务服务层接口 |
|pinyougou-xxx-service | 业务服务层实现(web 工程) |
|pinyougou-xxx-web | 展现(控制)层工程(web 工程) |

### 6.2. 创建数据库表
在导入的虚拟机里面已经有使用 mysql 5.7 的数据库名称为:pinyougoudb,
mysql5.7 的用户名和密码都为:root。
另外;也可以自行创建数据库,将“资料/database/pinyougoudb.sql”导入。

### 6.3. 创建工程&添加依赖
#### 6.3.1. pinyougou
品优购聚合父工程;包括后续开发的所有品优购聚合子工程。主要功能是进行依赖、插件统一管理。

##### 6.3.1.1. 创建
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021926836-1477146234.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021931376-1175777458.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021932144-2078538355.png)

##### 6.3.1.2. 依赖

> 后续的文中出现依赖表示修改当前项目的 pom.xml 文件

```xml

4.0.0

com.pinyougou
pinyougou
pom
1.0-SNAPSHOT

4.12
4.3.10.RELEASE
4.2.3.RELEASE
3.4.5
1.3.1
5.1.32
1.1.5
5.1.2
3.5.0
2.6.0
1.7.12
1.0
1.2.44
3.4.9
0.1
2.9.0
1.8.9.RELEASE
2.5
1.3.1
1.25
2.3.23
5.14.3
3.4.1
1.5.5.RELEASE
4.5.3
0.0.3
4.4.8
3.12.1.GA
1.11
1.6.1
2.0.2
2.3.2

junit
junit
${junit.version}

org.springframework
spring-beans
${spring.version}

org.springframework
spring-context
${spring.version}

org.springframework
spring-web
${spring.version}

org.springframework
spring-aspects
${spring.version}

org.springframework
spring-jdbc
${spring.version}

org.springframework
spring-webmvc
${spring.version}

org.springframework
spring-jms
${spring.version}

org.springframework
spring-context-support
${spring.version}

org.springframework
spring-test
${spring.version}

org.mybatis
mybatis
${mybatis.version}

org.mybatis
mybatis-spring
${mybatis.spring.version}

org.slf4j
slf4j-log4j12
${slf4j.version}

com.alibaba
dubbo
${dubbo.version}

org.apache.zookeeper
zookeeper
${zookeeper.version}

com.github.sgroschupf
zkclient
${zkclient.version}

com.alibaba
fastjson
${fastjson.version}

javax.servlet
servlet-api
${servlet.api.version}
provided

com.github.pagehelper
pagehelper
${pagehelper.version}

tk.mybatis
mapper
${mapper.version}

mysql
mysql-connector-java
${mysql.version}

com.alibaba
druid
${druid.version}

javax.persistence
persistence-api
${javax.persistence.version}

redis.clients
jedis
${jedis.version}

org.springframework.data
spring-data-redis
${spring.data.redis.version}

commons-fileupload
commons-fileupload
${commons.fileupload.version}

fastdfs_client
fastdfs_client
${fastdfs.client.version}

org.freemarker
freemarker
${freemarker.version}

org.apache.activemq
activemq-client
${activemq.version}

org.springframework.security
spring-security-web
${spring.security.version}

org.springframework.security
spring-security-config
${spring.security.version}

org.springframework.security
spring-security-cas
${spring.security.version}

org.jasig.cas.client
cas-client-core
${cas.client.core.version}

org.slf4j
log4j-over-slf4j

org.springframework.data
spring-data-solr
${spring.data.solr.version}

org.apache.httpcomponents
httpclient
${httpclient.version}

com.github.wxpay
wxpay-sdk
${wxpay.sdk.version}

com.github.penggle
kaptcha
${kaptcha.version}

javax.servlet
javax.servlet-api

commons-codec
commons-codec
${commons.codec.version}

javassist
javassist
${javassist.version}

dom4j
dom4j
${dom4j.version}

xml-apis
xml-apis
${xml.apis.version}

org.apache.maven.plugins
maven-compiler-plugin
3.6.0

1.8
1.8
UTF-8

org.apache.tomcat.maven
tomcat7-maven-plugin
2.2

```

#### 6.3.2. pinyougou-common
通用工具类工程;放置其它工程经常使用的工具类或者组件。
##### 6.3.2.1. 创建 ![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021943218-1035677152.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021946768-1159639925.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021949320-1598562434.png)

##### 6.3.2.2. 依赖
```xml

pinyougou
com.pinyougou
1.0-SNAPSHOT

4.0.0

pinyougou-common

```

#### 6.3.3. pinyougou-pojo
实体类工程;统一放置品优购的所有数据库实体类或者其它领域模型。
##### 6.3.3.1. 创建
创建 pinyougou 的子模块工程,与 pinyougou-common 的创建方式类似;后面的若是pinyougou 的子模块工程的创建也都如此;不再每一步都截图了。

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021951445-808894303.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021952915-506068754.png)

##### 6.3.3.2. 依赖
```xml

pinyougou
com.pinyougou
1.0-SNAPSHOT

4.0.0

pinyougou-pojo

javax.persistence
persistence-api

org.springframework.data
spring-data-solr

```

#### 6.3.4. pinyougou-dao
数据库通用访问层工程;放置 Mybatis 中对应于数据库操作的所有 Mapper 接口类。

##### 6.3.4.1. 创建
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021954073-546444878.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021958477-92575705.png)

##### 6.3.4.2. 依赖
```xml

pinyougou
com.pinyougou
1.0-SNAPSHOT

4.0.0

pinyougou-dao

com.pinyougou
pinyougou-pojo
1.0-SNAPSHOT

org.springframework
spring-beans

org.springframework
spring-jdbc

org.mybatis
mybatis

org.mybatis
mybatis-spring

com.github.pagehelper
pagehelper

tk.mybatis
mapper

mysql
mysql-connector-java

com.alibaba
druid

org.slf4j
slf4j-log4j12

```

#### 6.3.5. pinyougou-sellergoods
商家商品服务工程;该工程主要是对应于商品、商家、品牌、规格、商品分类等
的服务提供,由 pinyougou-sellergoods-interface 和 pinyougou-sellergoods-service构成。

##### 6.3.5.1. 创建
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103021959469-1389065956.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022000887-2014883648.png)

##### 6.3.5.2. 依赖
无需改动。
#### 6.3.6. pinyougou-sellergoods-interface
##### 6.3.6.1. 创建
注意这个工程是 pinyougou-sellergoods 的聚合子工程。
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022004846-441741843.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022005877-1143081457.png)
##### 6.3.6.2. 依赖
```xml

pinyougou-sellergoods
com.pinyougou
1.0-SNAPSHOT

4.0.0

pinyougou-sellergoods-interface

com.pinyougou
pinyougou-pojo
1.0-SNAPSHOT

```

#### 6.3.7. pinyougou-sellergoods-service
##### 6.3.7.1. 创建
注意这个工程是 pinyougou-sellergoods 的聚合子工程。
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022008621-1541865813.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022010289-594875421.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022011250-1767943051.png)
安装插件JBLJavaToWeb

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022012178-1226597899.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022013518-922461378.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022015089-1783557283.png)

##### 6.3.7.3. 依赖
```xml

pinyougou-sellergoods
com.pinyougou
1.0-SNAPSHOT

4.0.0
pinyougou-sellergoods-service
war

com.pinyougou
pinyougou-sellergoods-interface
1.0-SNAPSHOT

com.pinyougou
pinyougou-dao
1.0-SNAPSHOT

org.springframework
spring-beans

org.springframework
spring-context

org.springframework
spring-web

org.springframework
spring-aspects

com.alibaba
dubbo

org.apache.zookeeper
zookeeper

com.github.sgroschupf
zkclient

com.alibaba
fastjson

com.pinyougou
pinyougou-common
1.0-SNAPSHOT

org.apache.tomcat.maven
tomcat7-maven-plugin

/
9000

```
#### 6.3.8. pinyougou-manage-web
##### 6.3.8.1. 创建
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022016210-578156763.png)
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022017260-1582254414.png)

##### 6.3.8.2. 转换为 web 工程
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022018588-1192906015.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022019619-824614218.png)

##### 6.3.8.3. 依赖
```xml

pinyougou
com.pinyougou
1.0-SNAPSHOT

4.0.0
pinyougou-manage-web
war

com.pinyougou
pinyougou-sellergoods-interface
1.0-SNAPSHOT

org.springframework
spring-webmvc

org.slf4j
slf4j-log4j12

com.alibaba
dubbo

org.apache.zookeeper
zookeeper

com.github.sgroschupf
zkclient

com.alibaba
fastjson

javax.servlet
servlet-api
provided

org.apache.tomcat.maven
tomcat7-maven-plugin

/
9100

```
### 6.4. 整合工程
#### 6.4.1. pinyougou-dao
##### 6.4.1.1. applicationContext-dao.xml
添加
pinyougou\pinyougou-dao\src\main\resources\spring\applicationContext-dao.xml
内容如下:
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022020296-978093748.png)
```xml

```

##### 6.4.1.2. mybatis-config.xml
添加
pinyougou\pinyougou-dao\src\main\resources\mybatis\mybatis-config.xml
内容如下:

```xml

```

##### 6.4.1.3. db.properties
添加
pinyougou\pinyougou-dao\src\main\resources\properties\db.properties
内容如下:
```js
jdbc.driver=com.mysql.jdbc.Driver
#下面的按照自己实际的填写。如果连接服务器的mysql,就填写你服务器的ip。如果连接的是本地的mysql,就填写localhost
jdbc.url=jdbc:mysql://192.168.25.128:3306/pinyougoudb?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.username=root
jdbc.password=root
```
##### 6.4.1.4. log4j.properties
添加
pinyougou\pinyougou-dao\src\main\resources\log4j.properties
内容如下:
```js
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
```

#### 6.4.2. pinyougou-sellergoods-service
##### 6.4.2.1. applicationContext-service.xml
添加
pinyougou-sellergoods-service\src\main\resources\spring\applicationContext
service.xml
内容如下:
```xml

```

##### 6.4.2.2. web.xml
修改pinyougou-sellergoods-service\src\main\webapp\WEB-INF\web.xml内容如下:
```xml

org.springframework.web.context.ContextLoaderListener

contextConfigLocation
classpath*:spring/applicationContext*.xml

```
#### 6.4.3. pinyougou-manage-web
##### 6.4.3.1. springmvc.xml
添加
pinyougou\pinyougou-manage-web\src\main\resources\spring\springmvc.xml
内容如下:
```xml

```

##### 6.4.3.2. log4j.properties
添加
pinyougou\pinyougou-manage-web\src\main\resources\log4j.properties
内容如下:
```js
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
```
##### 6.4.3.3. web.xml
修改
pinyougou\pinyougou-manage-web\src\main\webapp\WEB-INF\web.xml
内容如下:
```xml

CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
utf-8

forceEncoding
true

CharacterEncodingFilter
/*

springmvc
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
classpath:spring/springmvc.xml

1

springmvc
*.do

```

6.4.4. 引入品优购实体类
在 pinyougou-pojo 工程创建 com.pinyougou.pojo 包;然后将“资料/pojo”下的所有
实体类复制到上述创建的包中。
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022021379-81099363.png)

## 7. 查询品牌列表数据
### 7.1. 需求分析
在浏览器上访问:http://localhost:9100/brand/findAll.do 把品牌数据(json 格式字
符串)加载并显示。
### 7.2. 数据库表
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022022417-1259757222.png)
### 7.3. 后端代码
#### 7.3.1. BrandMapper 接口
添加
pinyougou-dao\src\main\java\com\pinyougou\mapper\BrandMapper.java
内容如下:
```java
package com.pinyougou.mapper;

import com.pinyougou.pojo.TbBrand;

import java.util.List;

public interface BrandMapper {

List queryAll();

}
```

#### 7.3.2. BrandMapper.xml 配置文件
添加
pinyougou-dao\src\main\resources\com\pinyougou\mapper\BrandMapper.xml
内容如下:
```xml

SELECT *
FROM tb_brand

```

#### 7.3.3. BrandService 接口
添加
pinyougou-sellergoods\pinyougou-sellergoods
interface\src\main\java\com\pinyougou\sellergoods\service\BrandService.java
内容如下:

```java
package com.pinyougou.sellergoods.service;

import com.pinyougou.pojo.TbBrand;

import java.util.List;

public interface BrandService {

public List queryAll();

}
```

#### 7.3.4. BrandServiceImpl 实现类
添加
pinyougou-sellergoods\pinyougou-sellergoods
service\src\main\java\com\pinyougou\sellergoods\service\impl\BrandServiceImpl.ja
va
内容如下:
```java
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 queryAll() {

return brandMapper.queryAll();
}

}
```

#### 7.3.5. BrandController 处理器
添加
pinyougou-manage
web\src\main\java\com\pinyougou\manage\controller\BrandController.java
内容如下:
```java
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 findAll(){
return brandService.queryAll();
}

}
```

### 7.4. 安装工程
点击 IDEA 最右边的“Maven Projects”

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022022923-316224740.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022024208-1776121530.png)

### 7.5. 启动
#### 7.5.1. 启动 pinyougou-sellergoods-service
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022024914-566655212.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022026967-1029243311.png)

![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022028808-1851159258.png)

#### 7.5.2. 启动 pinyougou-manage-web
这个启动与 pinyougou-sellergoods-service 的启动配置是一样的;不在赘述图。
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022029808-1481480004.png)
7.6. 测试
打开 chrome 浏览器;输入:http://localhost:9100/brand/findAll.do
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022031362-267759983.png)
## 8. Git 管理代码
## 9. 常见问题
### 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 目录的存在

> 以上为第一天内容,视频参考[Java 品优购互联网商城 项目实战(基于IDEA)新版](https://www.bilibili.com/video/av55022610)。因为第一天是没有视频的,是基于这份pdf讲义实现的。然而这份pdf讲义也有很多错误,有的是因为资源是旧的,不兼容,还有的是直接是里面代码的错误导致的bug。以上我博客的内容基本是花了时间排除了错误后的实现。所以有些地方会与讲义不同。
![在这里插入图片描述](https://img2018.cnblogs.com/blog/756375/201911/756375-20191103022031652-597340089.png)
第一天内容我写了[思维导图](https://www.xmind.net/m/iPGKp9/),打开有点慢。
博客内容中,如果我有哪些没有讲清楚或者实现中遇到了哪些问题,请在评论中留言,我看到会尽快回复的,或者其他小伙伴看到也会帮忙解决的。
第一天需要使用的[资料hirr](https://pan.baidu.com/s/1mCNcLd2tlvTFk8cINo9OFw),或者[不失效的](https://tpedutw-my.sharepoint.com/:f:/g/personal/miion_tp_edu_tw/Em6717vDPGVDgotXl3L6lEIBtRlDEhdJvwXMWdtfqq2FYg?e=S7brY5)

品优购(IDEA版)-第一天的更多相关文章

  1. 品优购(IDEA版)-第二天

    品优购-第2天 学习目标 目标1:运用AngularJS前端框架的常用指令 目标2:完成品牌管理的列表功能 目标3:完成品牌管理的分页列表功能 目标4:完成品牌管理的增加功能 目标5:完成品牌管理的修 ...

  2. 使用IDEA实现品优购项目搭建

    转发自 https://www.jianshu.com/p/4710a87b65fa 使用idea实现品优购项目搭建 1.使用idea实现品优购项目搭建 本篇文章只针对品优购第一天使用 IDEA 搭建 ...

  3. 项目二:品优购 第二天 AngularJS使用 brand商品页面的增删改查

    品优购电商系统开发 第2章 品牌管理 传智播客.黑马程序员 1.前端框架AngularJS入门 1.1 AngularJS简介 AngularJS  诞生于2009年,由Misko Hevery 等人 ...

  4. 品优购商城项目(六)CAS客户端与SpringSecurity集成

    cas单点登录旨在解决传统登录模式session在分布式项目中共享登录信息的问题. 本文cas服务器使用 4.0版本,仅供学习参考.把 cas.war 直接部署在tomcat即可,这里有个固定的用户名 ...

  5. 品优购商城项目(二)mybatis分页插件

    品优购商城项目第二天,使用mybatis分页插件实现分页.主要实现的是 SSM整合mybatis分页. 一.引用mybatis分页插件 SqlMapConfig.xml <?xml versio ...

  6. 品优购商城项目(三)安全框架SpringSecurity

    品优购商城项目第三阶段 1.springSecurity的基本用法与shiro类似. 2.BCrypt加密算法比MD5更加智能和安全,能自动加盐再加密,生成的密码是60位比md5的32位更占空间(可以 ...

  7. 品优购商城项目(二)AngularJS、自动代码生成器、select2下拉多选框

    品优购商城想项目第二阶段 AngularJS.自动代码生成器.select2下拉多选框 完成了课程第三天.第四天的的任务. 1.学习了AngularJs前端的mvc分层思想,js部分分成control ...

  8. 品优购商城项目(一)mybatis逆向工程

    第一阶段 dubboX和mybatis逆向工程 用了四天时间才完成品优购项目前两天的任务. 1.其中主要遇到的坑就是zookeeper服务消费者无法调用的问题.造成这个问题的主要原因就是忽略了dubb ...

  9. 品优购详情页---产品详细信息区域 iteminfo_wrap

    产品详细信息区域为整个大盒子命名为: iteminfo_wrap 1号盒子命名为:sku_name 2号盒子命名为:news 3号盒子命名为:summary step1:3个盒子搭建框架,以及完成前两 ...

随机推荐

  1. python + selenium 环境搭建及问题

    搭建平台windows 准备工具如下: ------------------------------------------------------------- 下载python https://w ...

  2. 《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》

    <菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...

  3. cvc-complex-type.2.3: Element 'dependency' cannot have character [children], because the type's cont

    直接复制网上的pom引入,报错 解决:自己手动输入一遍,不用直接复制,因为复制的时候,项目中编码跟网页上编码不一致,很容易导致出问题.

  4. MongoDB的可视化工具(Studio 3T)

    ​​ 前面我们已经介绍了MongoDB怎么安装,接下来要安装他的可视化工具——Studio 3T. 先到这下载一个压缩包,百度网盘,https://pan.baidu.com/s/1M8mlWo334 ...

  5. S2-052 漏洞复现

    Structs2框架已知的漏洞编号如下: S2-005 S2-009 S2-016 (含S2-013) S2-019 S2-020 S2-021 S2-032 S2-037(含S2-033) DevM ...

  6. java架构之路-(SpringMVC篇)SpringMVC主要流程源码解析(下)注解配置,统一错误处理和拦截器

    我们上次大致说完了执行流程,也只是说了大致的过程,还有中间会出错的情况我们来处理一下. 统一异常处理 比如我们的运行时异常的500错误.我们来自定义一个类 package com.springmvcb ...

  7. Openshift yum安装

    Openshift yum安装: Yum 安装docker [root@DockerServer openshift]# yum repolist [root@DockerServer openshi ...

  8. vue-hash-calendar,移动端日期时间选择插件

    按照惯例,先上效果图 vue-hash-calendar 基于 vue 2.X 开发的日历组件 支持手势滑动操作·1 原生 js 开发,没引入第三方库 上下滑动 切换 周/月 模式 [周模式中] 左右 ...

  9. js中try、catch、finally的执行规则

    首先一个常识就是,在浏览器执行JS脚本过程中,当出现脚本错误,并且你没有手动进行异常捕捉时,他会在浏览器下面出现黄色的叹号,这是正常的,这也不是最重要的,最重要的是,出错行以下的所有JS代码将中停执行 ...

  10. IP的分类以及子网划分、网络设置

    前言 整个因特网就是一个单一的.抽象的的网络.IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位的标识符.IP地址的结构使我们可以在因特网上很方便的进行寻址. ...