第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. 社区活跃度

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

项目初始化及MyBatis Generator配置

1. 项目初始化

1.1 创建新项目

  1. 打开IDE,选择“Create New Project”。
  2. 选择 Spring Initializer 并点击 Next
  3. 配置 Groupcom.imockArtifactmore,项目类型选择 Maven,Java版本选择 8

1.2 选择依赖

  1. 选择 Spring Web 依赖,完成项目创建。

1.3 配置Spring Boot版本

  1. 打开 pom.xml 文件,修改 Spring Boot 版本为 2.2.1.RELEASE
  2. 右键点击项目,选择 Maven -> Reimport 来重新解析依赖。

1.4 运行项目

  1. src/main/java 目录下找到 MoreApplication 类,右键选择运行。
  2. 程序启动后,日志中会显示 started 表示启动成功。

2. 整合MyBatis Generator

2.1 添加MyBatis依赖

  1. 打开 pom.xml 文件,添加以下依赖:
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.3</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.18</version>
    </dependency>
    

2.2 添加MyBatis Generator插件

  1. pom.xml 中添加以下插件配置:
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.7</version>
        <configuration>
            <overwrite>false</overwrite>
            <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
        </configuration>
    </plugin>
    

2.3 配置MyBatis Generator配置文件

  1. 创建 generatorConfig.xml 文件,并放置在 src/main/resources 目录下。配置数据库连接信息以及需要生成的类文件。
  2. 需要修改数据库的连接池配置及数据库地址、用户名和密码等信息。

2.4 配置数据库

  1. 在 MySQL 中创建数据库 imock_more

    CREATE DATABASE imock_more;
    
  2. 导入 SQL 脚本,创建数据库表和初始数据。

2.5 生成代码

  1. 配置好数据库连接和表结构后,右键点击 mybatis-generator-maven-plugin 插件,选择 Generate
  2. 生成成功后,modeldao 目录下会生成对应的实体类和数据库操作方法。

3. 生成的文件分析

3.1 DAO文件

  1. dao 目录下会生成各种数据库操作方法,如 insertdeleteselect 等。

3.2 POJO文件

  1. pojo 目录下会生成数据库表对应的实体类,每个表生成一个 Java 类,包含表的字段与相应的 getter/setter 方法。

3.3 Map文件

  1. maps 目录下生成 .xml 文件,这些文件用于存储 SQL 语句,保持 SQL 与 Java 代码的分离,方便维护。

3.4 使用MyBatis的优势

  1. 使用 MyBatis 可以将 SQL 和 Java 代码分开,易于管理和维护。
  2. 插件生成的 DAO 和 POJO 文件可以加速开发,提高开发效率。

课程笔记:Spring Boot与MyBatis配置及基础操作

1. 数据源配置

在引入 MyBatis 后,程序无法正常启动,错误提示是数据源未配置。因此,首先需要配置数据库连接。配置内容包括:

  • 数据库名imook-more
  • 数据库URL:包括IP、端口号以及数据库名。
  • 数据库编码:UTF-8
  • 时区Asia/Shanghai
  • 驱动类com.mysql.cj.jdbc.Driver
  • 数据库账号和密码

配置完成后,程序能够成功启动,说明已经通过配置连接到数据库。

2. 创建Controller和Service层

2.1 创建Controller层

  1. src/main/java 下创建 controller 包。
  2. 创建 UserController 类并注入 @Controller 注解。
  3. 编写方法 public User personalPage(),返回用户对象。
  4. 使用 @ResponseBody 注解使返回值以 JSON 格式返回。

2.2 创建Service层

  1. 创建 service 包。
  2. 创建 UserService 接口,定义 getUser() 方法返回 User 实体。
  3. 创建实现类 UserServiceImpl,实现 UserService 接口,并在方法中调用 MyBatis 生成的 UserMapper,使用 selectByPrimaryKey 方法查询数据库中用户信息。
  4. 使用 @Autowired 注解注入 UserMapper

2.3 修改Controller层

  1. UserController 中注入 UserService 并调用其 getUser() 方法。
  2. 修改 getUser() 返回 User 对象的 JSON 格式数据。

3. 配置MyBatis Mapper文件路径

在配置文件中,指定 MyBatis 的 Mapper 文件路径,通常在 src/main/resources 下。配置项如下:

mybatis.mapper-locations=classpath:mapper/*.xml

确保 MyBatis 能正确扫描并加载映射文件。

4. 配置Spring识别Mapper

Spring 需要识别 Mapper,使用 @Mapper 注解或配置 @Repository 注解,确保 IDE 能正确识别。

  1. Mapper 接口类上添加 @Repository 注解,解决 IDE 的红色波浪线提示。
  2. 配置 Spring 扫描 Mapper 文件路径,如:
@MapperScan("com.imook.mall.model.dao")

5. 启动应用并测试

在完成所有配置后,启动应用程序。浏览器中访问接口,确保返回数据与数据库中的数据一致。

例如,User 的个性签名字段被更新为 “666”,并成功返回。

6. 解决IDE红色波浪线问题

IDE提示红色波浪线时,表示 Mapper 接口没有正确注解。在类上添加 @Repository 注解来解决此问题,这样 IDE 能正确识别并消除错误提示。

Log4j2 日志配置与使用

1. 日志级别概述

日志是开发过程中必不可少的关键组成部分。常见的日志级别有五个,它们的优先级从高到低依次为:

  • ERROR:表示错误,通常在异常或系统错误发生时使用。例如,数据库连接失败时,打印 error 日志。
  • WARN:表示警告,通常用于潜在的或不严重的问题。
  • INFO:信息日志,记录一般性的信息,通常用于记录用户请求和返回等事件。
  • DEBUG:调试日志,通常用于开发过程中记录一些不影响程序运行但对调试有帮助的信息,如方法执行时间。
  • TRACE:追踪日志,记录最为详细的信息,通常用于框架开发者使用,业务开发者一般不需要关注。

开发中常用的日志级别是 ERROR、INFO 和 DEBUG。

2. 引入 Log4j2 依赖

在使用 Spring Boot 时,我们需要先排除默认的日志组件,以避免冲突。打开 pom.xml 文件并进行如下配置:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

这样可以排除默认的日志组件并引入 Log4j2。

3. 配置 Log4j2

接下来,需要在 resources 目录下创建 Log4j2 配置文件 log4j2.xml,配置日志输出的路径和级别。

3.1 配置文件内容

<Configuration status="WARN">
    <!-- 定义日志文件保存路径 -->
    <Properties>
        <Property name="basedir">${sys:user.home}/logs</Property>
    </Properties>

    <!-- 控制台输出配置 -->
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n" />
        </Console>

        <!-- Debug 日志输出到文件 -->
        <RollingFile name="DebugFile" fileName="${basedir}/debug.log" filePattern="${basedir}/debug-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>

        <!-- Info 日志输出到文件 -->
        <RollingFile name="InfoFile" fileName="${basedir}/info.log" filePattern="${basedir}/info-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>

        <!-- Error 日志输出到文件 -->
        <RollingFile name="ErrorFile" fileName="${basedir}/error.log" filePattern="${basedir}/error-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <!-- Logger 配置 -->
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="DebugFile" />
            <AppenderRef ref="InfoFile" />
            <AppenderRef ref="ErrorFile" />
        </Root>
    </Loggers>
</Configuration>

3.2 配置说明

  1. 日志输出路径

    • 使用 Properties 标签定义了一个 basedir,其值为 ${sys:user.home}/logs,该路径是用户主目录下的 logs 文件夹。
    • 请确保在服务器或本地开发环境中手动创建该文件夹。
  2. 控制台输出

    • 配置了 Console 输出器,日志级别为 INFO,将打印 INFO 及以上级别的日志。
  3. 文件输出

    • 配置了三个日志文件:debug.loginfo.logerror.log,分别用于存储不同级别的日志。
    • 文件按天滚动,每天生成一个新的日志文件。
  4. 日志格式

    • 日志输出格式为 "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n",包括时间戳、线程、日志级别和日志内容。

3.3 配置文件解释

  • RollingFile:指定日志文件的滚动策略,支持按时间或大小进行滚动。
  • Policies:配置了 TimeBasedTriggeringPolicy,表示按天滚动日志文件。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值