1.数据库设计
创建Mysql数据库
使用Mysql5.7.26版本,创建数据库ShoppingSystem,并设置编码为utf8
数据库E-R图设计
- 文本列出所需要的表与表的基本信息
表名 | 中文含义 | 介绍 |
---|---|---|
Category | 分类表 | 存放分类信息(分类名:电子元件,电器,书籍) |
Property | 属性表 | 存放属性信息(属性名:颜色,重量,品牌) |
Product | 产品表 | 存放产品信息(产品名,价格等) |
PropertyValue | 属性值表 | 存放属性值信息(产品相应属性表的值) |
ProductImage | 产品图片表 | 存放产品图片信息 |
Review | 评论表 | 存放评论信息(用户对某一产品的评论) |
User | 用户表 | 存放用户信息 |
Order | 订单表 | 存放订单信息(用户下订单基本信息:邮寄地址,电话号码) |
OrderItem | 订单项表 | 存放订单项信息(订单产品信息:产品种类,数量) |
- 表与表的关系
一 | 多 |
---|---|
Category-分类 | Product-产品 |
Category-分类 | Property-属性 |
Property-属性 | PropertyValue-属性值 |
Product-产品 | PropertyValue-属性值 |
Product-产品 | ProductImage-产品图片 |
Product-产品 | Review-评价 |
User-用户 | Order-订单 |
Product-产品 | OrderItem-订单项 |
User-用户 | OrderItem-订单项 |
Order-订单 | OrderItem-订单项 |
User-用户 | Review-评价 |
- 数据库设计E-R图(这里用idea直接生成)
重要数据表解析
产品表(prouct)
name: 产品名称
subTitle: 小标题
originalPrice: 原始价格
promotePrice: 优惠价格
stock: 库存
createDate: 创建日期
订单表(order)
orderCode: 订单号
address:收货地址
post: 邮编
receiver: 收货人信息
mobile: 手机号码
userMessage: 用户备注信息
createDate: 订单创建日期
payDate: 支付日期
deliveryDate: 发货日期
confirmDate:确认收货日期
status: 订单状态
外键uid,指向用户表id字段
订单项表(orderitem)
外键pid,指向产品表id字段
外键oid,指向订单表id字段
外键uid,指向用户表id字段
number字段表示购买数量
2.项目结构
系统访问路径
前台:http://127.0.0.1:8080/tmall_springboot/home
后台:http://127.0.0.1:8080/tmall_springboot/admin
技术架构
前端:
- Vue.js:前端逻辑处理数据
- Bootstrap:使用模板样式
- Jquery
- axios
- Thymeleaf:主要使用其HTML包含技术,整合页面共用部分(Springboot官方推荐的视图)
后端:
- SpringBoot 1.5.9 RELEASE
- Maven
- Hibernate
相关依赖准备
pom.xml文件导入相关依赖
<dependencies>
<!-- springboot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springboot tomcat 支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- jpa:java持久层api,用于操作数据库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- redis:基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,一般说来,会被当作缓存使用。 因为它比数据库(mysql)快 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- springboot test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- thymeleaf: Thymeleaf 是一种模板语言,可以达到和JSP一样的效果,但是比起JSP 对于前端测试更加友好-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- elastic search:Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- 用了 elasticsearch 就要加这么一个,不然要com.sun.jna.Native 错误 -->
<dependency>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
<version>3.0.9</version>
</dependency>
<!-- thymeleaf legacyhtml5 模式支持 -->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
<!-- 测试支持 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- tomcat的支持.-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.23</version>
</dependency>
<!-- mysql:数据库支持-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<!-- junit:java自动测试工具 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version> 4.12</version>
</dependency>
<!-- commons-lang:提供常用工具包 -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- shiro:Java 当下常见的安全框架,主要用于用户验证和授权操作 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- hsqldb是一款Java内置的数据库,非常适合在用于快速的测试和演示的Java程序中 -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
</dependency>
<!-- springfox-swagger依赖添加:文档化工具 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
</dependencies>
3.技术亮点
分页组接口开发
(1)简单分页方法
Service层实现简单分页方法
这里使用JPA提供的Pageable类型对列表进行分页
Pageable是从0开始计算页数的,所以这里需要pageNum - 1
public Page<Category> getpage(int pageNum, int pageLimit){
Pageable pageable = new PageRequest(pageNum - 1 , pageLimit);
return categoryDAO.findAll(pageable);
}
Controller层调用分页方法
通过@RequestParam设置从前台get方法发来的page和size信息
@GetMapping("/catepage")
public Page<