第25周JavaSpringboot实战-电商项目 2.数据库准备和项目初始化
数据库设计与项目初始化课程笔记
一、模块概述
本模块主要包含以下三个部分:
- 表设计:详细介绍项目中涉及的数据表,包括表名、字段、字段类型、注释及字段特征(如主键等)。
- 技术选型与思路:介绍技术选型的内容及选择思路,包括工具、框架、架构等,并分析其优点。
- 项目初始化:从零开始新建项目,整合 MyBatis,跑通第一个接口,引入 Log4j2 日志组件,并使用 AOP 统一处理 Web 请求日志。
二、表设计
(一)表设计规范
- 表名规范:
- 表名使用单数形式,不加“s”,例如 user 而不是 users。
- 表名统一加上项目前缀,如 imook_,以防止重名和与关键字冲突。
- 字段设计:
- 每张表包含
create_time
和update_time
字段,类型为 timestamp,用于记录创建时间和更新时间。 - 主键字段通常命名为
id
,类型为int
。
- 每张表包含
(二)具体表结构
-
用户表(imook_user)
字段名 类型 注释 特殊说明 id int 用户ID 主键 username varchar 用户名 password varchar 密码 personalized_signature varchar 个性签名 role int 用户角色 (1:普通用户,2:管理员)默认值为 1 create_time timestamp 创建时间 默认值为当前时间 update_time timestamp 更新时间 自动更新为修改时间 -
目录表(imook_category)
字段名 类型 注释 特殊说明 id int 分类ID 主键 name varchar 分类名称 type int 分类级别 (1:一级,2:二级,3:三级) parent_id int 父分类ID 一级分类的 parent_id 为 0 order_number int 排序字段 create_time timestamp 创建时间 默认值为当前时间 update_time timestamp 更新时间 自动更新为修改时间 -
商品表(imook_product)
字段名 类型 注释 特殊说明 id int 商品ID 主键 name varchar 商品名称 image varchar 商品图片路径 detail varchar 商品详情 category_id int 所属分类ID price int 商品价格(单位:分) 前端需除以 100 显示为元 stock int 库存数量 status int 上下架状态 (0:下架,1:上架) create_time timestamp 创建时间 默认值为当前时间 update_time timestamp 更新时间 自动更新为修改时间 -
购物车表(imook_cart)
字段名 类型 注释 特殊说明 id int 购物车记录ID 主键 product_id int 商品ID user_id int 用户ID quantity int 商品数量 checked int 是否勾选 (0:未勾选,1:已勾选) -
订单表(imook_order)
字段名 类型 注释 特殊说明 id int 订单ID 主键 order_number varchar 订单号 非主键,用于隐藏订单数量 user_id int 用户ID total_price int 订单总金额(单位:分) recipient_name varchar 收货人姓名 recipient_phone varchar 收货人电话 recipient_address varchar 收货地址 status int 订单状态 (10:待付款,20:已付款,30:已发货,40:已完成,0:已取消) shipping_fee int 运费 默认为 0 payment_type int 支付方式 (1:在线支付)默认值为 1 shipping_time timestamp 发货时间 默认为空 payment_time timestamp 支付时间 默认为空 complete_time timestamp 完成时间 默认为空 create_time timestamp 创建时间 默认值为当前时间 update_time timestamp 更新时间 自动更新为修改时间 -
订单项目表(imook_order_item)
字段名 类型 注释 特殊说明 id int 订单项目ID 主键 order_number varchar 所属订单号 product_id int 商品ID product_name varchar 商品名称 (快照)记录下单时的状态 product_image varchar 商品图片路径 (快照)记录下单时的状态 product_price int 商品单价 (快照,单位:分)记录下单时的状态 quantity int 购买数量 total_price int 商品总价(单位:分) create_time timestamp 创建时间 默认值为当前时间 update_time timestamp 更新时间 自动更新为修改时间
三、技术选型与思路
技术选型内容:
- 选择合适的工具、框架和架构。
- 同一技术可能有多种实现方式,需根据项目需求和经验选择最优方案。
选型优点:
- 提高开发效率。
- 保证系统稳定性和可扩展性。
四、项目初始化
- 整合 MyBatis:实现数据库操作。
- 引入 Log4j2:用于日志记录,替代之前的 Logback。
- 使用 AOP 统一日志处理:
- 记录请求地址、参数、IP 等信息。
- 记录接口返回值,便于问题排查。
技术选型与考虑因素
一、所用技术与版本
在本项目中,我们选择了以下主要的软件和版本:
-
Spring Boot 2.2.1 Release:此版本是稳定版,我们在前面Spring Boot入门时已经详细介绍过,因此这里不再重复。我们选择了稳定版来确保系统的稳定性。
-
MyBatis:我们选择了 MyBatis 而不是其他数据库连接方案(如 JPA)。原因是 MyBatis 是半自动化的,允许开发人员灵活控制 SQL 语句的编写,使开发更加清晰和可控。
-
Maven 3.6.1:这是 IntelliJ IDEA 自动集成的 Maven 版本。如果您使用不同的版本,也没有太大问题。
-
Log4j2 2.12.1:我们选择了这个版本来记录日志,替代了之前的 Logback。我们将在引入依赖时进一步介绍如何配置。
二、技术选型时需要考虑的因素
1. 软件版本的选择
选择软件版本时,最优先考虑的是 稳定性,而非追求最新版本。新版本往往可能会有一些 bug,这些 bug 很难由普通开发人员修复,特别是如果只有框架的深度使用者才能修复时,问题就会变得复杂。因此,稳定版本是优先选择的目标。
2. 团队对技术栈的熟悉度
团队对技术栈的熟悉程度非常重要。假设团队的大部分成员熟悉 Java 开发,就没有必要去选择像 PHP 这样的语言。虽然每种语言都有其优势,但从开发熟悉度出发,选择团队擅长的技术栈有助于提高开发效率和质量。
3. 开发效率与生态
技术的生态系统对开发效率有重要影响。像 Spring 这样拥有强大生态系统的框架,提供了大量的组件和工具,可以大大提高开发效率。如果选择了一个小众技术栈,可能在遇到问题时没有现成的开源项目可以借鉴,这将导致开发效率下降,需要自己去重新实现一些功能。
4. 未来前景与社区活跃度
未来前景和社区活跃度是选型时需要重点考虑的因素。技术的前景关系到未来的维护成本和团队的持续学习需求。如果某个技术的前景不好,社区活跃度低,那么随着时间的推移,它的使用者会逐渐减少,维护成本会逐步增加。例如,之前的 .NET 技术的未来前景较弱,使用者减少,维护成本提高。选择技术时要避免这些技术,选择那些有良好前景和活跃社区的技术,以确保技术更新和维护的顺利进行。
5. 社区活跃度
技术社区的活跃度非常重要,尤其在开发过程中难免会遇到问题。如果技术的社区活跃,您可以找到相关资料或从社区中的前辈那里获得经验。在遇到困难时,社区的支持能帮助您事半功倍。因此,社区的活跃程度对开发者的支持至关重要。