当前位置: 首页 > news >正文

第25周JavaSpringboot实战-电商项目 2.数据库准备和项目初始化

数据库设计与项目初始化课程笔记

一、模块概述

本模块主要包含以下三个部分:

  • 表设计:详细介绍项目中涉及的数据表,包括表名、字段、字段类型、注释及字段特征(如主键等)。
  • 技术选型与思路:介绍技术选型的内容及选择思路,包括工具、框架、架构等,并分析其优点。
  • 项目初始化:从零开始新建项目,整合 MyBatis,跑通第一个接口,引入 Log4j2 日志组件,并使用 AOP 统一处理 Web 请求日志。

二、表设计

(一)表设计规范

  • 表名规范
    • 表名使用单数形式,不加“s”,例如 user 而不是 users。
    • 表名统一加上项目前缀,如 imook_,以防止重名和与关键字冲突。
  • 字段设计
    • 每张表包含 create_timeupdate_time 字段,类型为 timestamp,用于记录创建时间和更新时间。
    • 主键字段通常命名为 id,类型为 int

(二)具体表结构

  1. 用户表(imook_user)

    字段名类型注释特殊说明
    idint用户ID主键
    usernamevarchar用户名
    passwordvarchar密码
    personalized_signaturevarchar个性签名
    roleint用户角色(1:普通用户,2:管理员)默认值为 1
    create_timetimestamp创建时间默认值为当前时间
    update_timetimestamp更新时间自动更新为修改时间
  2. 目录表(imook_category)

    字段名类型注释特殊说明
    idint分类ID主键
    namevarchar分类名称
    typeint分类级别(1:一级,2:二级,3:三级)
    parent_idint父分类ID一级分类的 parent_id 为 0
    order_numberint排序字段
    create_timetimestamp创建时间默认值为当前时间
    update_timetimestamp更新时间自动更新为修改时间
  3. 商品表(imook_product)

    字段名类型注释特殊说明
    idint商品ID主键
    namevarchar商品名称
    imagevarchar商品图片路径
    detailvarchar商品详情
    category_idint所属分类ID
    priceint商品价格(单位:分)前端需除以 100 显示为元
    stockint库存数量
    statusint上下架状态(0:下架,1:上架)
    create_timetimestamp创建时间默认值为当前时间
    update_timetimestamp更新时间自动更新为修改时间
  4. 购物车表(imook_cart)

    字段名类型注释特殊说明
    idint购物车记录ID主键
    product_idint商品ID
    user_idint用户ID
    quantityint商品数量
    checkedint是否勾选(0:未勾选,1:已勾选)
  5. 订单表(imook_order)

    字段名类型注释特殊说明
    idint订单ID主键
    order_numbervarchar订单号非主键,用于隐藏订单数量
    user_idint用户ID
    total_priceint订单总金额(单位:分)
    recipient_namevarchar收货人姓名
    recipient_phonevarchar收货人电话
    recipient_addressvarchar收货地址
    statusint订单状态(10:待付款,20:已付款,30:已发货,40:已完成,0:已取消)
    shipping_feeint运费默认为 0
    payment_typeint支付方式(1:在线支付)默认值为 1
    shipping_timetimestamp发货时间默认为空
    payment_timetimestamp支付时间默认为空
    complete_timetimestamp完成时间默认为空
    create_timetimestamp创建时间默认值为当前时间
    update_timetimestamp更新时间自动更新为修改时间
  6. 订单项目表(imook_order_item)

    字段名类型注释特殊说明
    idint订单项目ID主键
    order_numbervarchar所属订单号
    product_idint商品ID
    product_namevarchar商品名称(快照)记录下单时的状态
    product_imagevarchar商品图片路径(快照)记录下单时的状态
    product_priceint商品单价(快照,单位:分)记录下单时的状态
    quantityint购买数量
    total_priceint商品总价(单位:分)
    create_timetimestamp创建时间默认值为当前时间
    update_timetimestamp更新时间自动更新为修改时间

三、技术选型与思路

技术选型内容:

  • 选择合适的工具、框架和架构。
  • 同一技术可能有多种实现方式,需根据项目需求和经验选择最优方案。

选型优点:

  • 提高开发效率。
  • 保证系统稳定性和可扩展性。

四、项目初始化

  • 整合 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. 社区活跃度

技术社区的活跃度非常重要,尤其在开发过程中难免会遇到问题。如果技术的社区活跃,您可以找到相关资料或从社区中的前辈那里获得经验。在遇到困难时,社区的支持能帮助您事半功倍。因此,社区的活跃程度对开发者的支持至关重要。

相关文章:

  • Dify本地部署过程问题
  • openGauss 6.0.0 RC1数据库日常运维
  • AllData数据中台核心菜单十三:数据湖平台
  • 【大模型】硅基流动对接DeepSeek使用详解
  • Jenkins+maven+gitlab+shell 实现项目自动化部署
  • 聚铭网络入围2025年度江苏省政府采购信息安全设备协议供货名单
  • 汽车通信未来新趋势:Eclipse uProtocol
  • 如何使用DeepSeek + PlantUML/Mermaid 生成专业图表
  • mysql查询判断函数,类似decode
  • SQL 注入攻击详解[基础篇]:Web 应用程序安全漏洞与防御策略
  • 【算法】快排
  • Go 自动升级依赖版本
  • 网络安全“挂图作战“及其场景
  • Go入门之数组与切片
  • 【基础架构篇八】《DeepSeek异构计算:CPU/GPU/TPU协同加速方案》
  • 基于Spring Boot的社区居民健康管理平台的设计与实现
  • 【Vue3】Vue 3 中列表排序的优化技巧
  • Qt的QTabWidget样式设置
  • Python----数据结构(双向链表:节点,是否为空,长度,遍历,添加,删除,查找,循环链表)
  • 伯克利 CS61A 课堂笔记 10 —— Trees
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流
  • 夜读丨古代有没有近视眼?
  • 我驻苏丹使馆建议在苏中国公民尽快撤离
  • 首届上海老年学习课程展将在今年10月举办
  • 李干杰走访各民主党派中央和全国工商联机关
  • 公募基金改革八大要点:建立浮动管理费收取机制、降低规模排名考核权重