类似抖音的短视频管理系统+Java后端+vue前端(2)

进行项目的基本配置以及项目的Mybatis的配置,包括maven项目配置文件pom.xml、Mybatis配置文件mybatis-config.xml、Mybatis连接数据库所需要的数据库信息文件db.properties、Spring和Mybatis整合文件spring-mybatis.xml、MyBatis发生器(MBG)文件generatorConfig.xml、MBG所需要的数据库信息文件config.properties和日志配置文件log4j.properties,并且在后端通过单元测试进行对数据库的增删改查操作

配置maven项目配置文件pom.xml

定义项目的JDK版本

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

项目的依赖项

<dependencies>
<!--第三方依赖验证码-->
<!--    <dependency>-->
<!--      <groupId>cn.dsna.util.images</groupId>-->
<!--      <artifactId>ValidateCode</artifactId>-->
<!--      <version>1.0</version>-->
<!--    </dependency>-->
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>5.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>5.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
  <groupId>org.mybatis.generator</groupId>
  <artifactId>mybatis-generator-core</artifactId>
  <version>1.4.1</version>
</dependency>
<!--整合Spring的测试包-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>5.3.24</version>
  <scope>test</scope>
</dependency>
<!--导入myBatis和Spring整合的中间包-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>3.0.0</version>
</dependency>
<!-- 导入spring的相关包-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.3.22</version>
</dependency>
<!-- spring-core -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.3.22</version>
</dependency>
<!-- spring-web -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
        <version>5.3.22</version>
</dependency>
<!-- spring-beans -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>5.3.22</version>
</dependency>
<!-- spring-webmvc -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
        <version>5.3.22</version>
</dependency>
<!-- spring-aop -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>5.3.22</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.3.22</version>
</dependency>
<!-- spring-tx -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-tx</artifactId>
  <version>5.3.22</version>
</dependency>
<!--导入mybatis的包 -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.11</version>
</dependency>
<!--导入mybatis运行的时候的一些依赖包日志相关的 -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>
<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-to-slf4j</artifactId>
  <version>2.17.2</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.2</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.36</version>
</dependency>
<!--导入的是日志相关的包 -->
<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
</dependency>
<!--导入aspectj的相关包 -->
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.9.19</version>
  <scope>runtime</scope>
</dependency>
<!--导入cglib代理的包 -->
<dependency>
  <groupId>cglib</groupId>
  <artifactId>cglib</artifactId>
  <version>3.3.0</version>
</dependency>
<!--引入c3p0 包 -->
<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.30</version>
</dependency>
<!--导入Servlet的API-->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>
<!-- 导入我们jstl的标签库的包 -->
<dependency>
  <groupId>javax.servlet.jsp.jstl</groupId>
  <artifactId>javax.servlet.jsp.jstl-api</artifactId>
  <version>1.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.0</version>
  <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
  <groupId>org.apache.taglibs</groupId>
  <artifactId>taglibs-standard-impl</artifactId>
  <version>1.2.5</version>
  <scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
        <version>2.9.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
        <version>2.9.5</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
        <version>2.9.5</version>
</dependency>
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.11.0</version>
</dependency>
<!--shriro的核心包主要在该项目用来完成密码的加密功能-->
<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-core</artifactId>
  <version>1.10.1</version>
</dependency>
<dependency>
  <groupId>org.thymeleaf</groupId>
  <artifactId>thymeleaf</artifactId>
  <version>3.0.10.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.thymeleaf</groupId>
  <artifactId>thymeleaf-spring5</artifactId>
        <version>3.0.10.RELEASE</version>
</dependency>
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.4</version>
</dependency>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<!--    <dependency>-->
<!--      <groupId>org.apache.poi</groupId>-->
<!--      <artifactId>poi-ooxml-schemas</artifactId>-->
<!--      <version>4.1.2</version>-->
<!--    </dependency>-->
</dependencies>

项目的插件

<build>
    <finalName>tiktok-project</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
    <plugins>
        <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.4.1</version>
        <!--设置配置文件的位置-->
        <configuration>
            <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
            <overwrite>true</overwrite>
            <verbose>true</verbose>
        </configuration>
        <dependencies>
            <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
            </dependency>
        </dependencies>
        </plugin>

        <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.0.2</version>
        </plugin>
        <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        </plugin>
        <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.1</version>
        </plugin>
        <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
        </plugin>
        <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
        </plugin>
        <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.8.2</version>
        </plugin>
    </plugins>
    </pluginManagement>
</build>

编写Spring和Mybatis整合文件spring-mybatis.xml

<!--配置Spring的扫描器   给带有特定注解bean注册到容器中-->
    <context:component-scan base-package="com.qf.dy">
    </context:component-scan>

    <!--引入数据库的初始文件文件 -->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:db.properties"/>
    </bean>

    <!-- 配置数据源 c3p0 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    >
        <property name="driverClass" value="${driver}"/>
        <property name="jdbcUrl" value="${url}"/>
        <property name="user" value="${username}"/>
        <property name="password" value="${password}"/>
        <!-- c3p0连接池的私有属性 -->
        <property name="maxPoolSize" value="${maxActive}"/>
        <property name="minPoolSize" value="${minActive}"/>
        <property name="initialPoolSize" value="${initialSize}"/>
        <!-- 关闭连接后不自动commit -->
        <property name="autoCommitOnClose" value="${autoCommitOnClose}"/>
        <!-- 获取连接超时时间 -->
        <property name="checkoutTimeout" value="${maxWait}"/>
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="${acquireRetryAttempts}"/>
    </bean>

    <!-- spring和MyBatis整合,通过spring来管理MyBatis的SqlSessionFactory会话工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入我们的数据源 -->
        <property name="dataSource" ref="dataSource">
        </property>
        <!--指定mybatis的配置文件路径,该配置文件下不需要再定义数据库连接信息和mapper信息了,但是可以有一些关于mybatis的配置信息-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--扫描mapper配置文件中的.xml文件-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        <!--设置别名-->
        <property name="typeAliasesPackage" value="com.qf.dy.pojo">
        </property>
    </bean>

    <!-- 定义sqlSession对象,通过SqlSessionTemplate来产生,需要在构造方法中指定会话工厂
        相当于原来mybatis中的sessionFactory.openSession();SqlSessionTemplate是线程安全的,所以采用单例模式
    -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <!--注入会话工厂-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

    <!--定义mybaits的DAO接口所在的包名,spring会自动查找其下的接口,并为其自动创建bean,无需我们定义-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入sqlSessionTemplate-->
        <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate"/>
        <!--配置要扫描的dao包 -->
        <property name="basePackage" value="com.qf.dy.dao">
        </property>
    </bean>

    <!-- JDBC事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 启用支持annotation注解方式事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

编写Mybatis配置文件mybatis-config.xml

mybatis-config.xml文件模板

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration 
     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    <settings>-->
<!--        <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<!--    </settings>-->

    <!--设置别名-->
    <typeAliases>
        <!--name;实体类所在的包名-->
        <package name=""/>
    </typeAliases>

    <mappers>
        <!--name:是包名  这个包中的所有mapper.xml 一次都能加载-->
        <package name=""/>
    </mappers>
</configuration>

编写MBG所需要的数据库信息文件config.properties

driverClassName=com.mysql.cj.jdbc.Driver
validationQuery=select 1
jdbc_url=jdbc:mysql://localhost:3306/db_short_video?serverTimezone=UTC
jdbc_username=root
jdbc_password=123456

编写Mybatis连接数据库所需要的数据库信息文件db.properties

#mysql
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db_short_video?useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
#\u5B9A\u4E49\u521D\u59CB\u8FDE\u63A5\u6570
initialSize=2
#\u5B9A\u4E49\u6700\u5927\u8FDE\u63A5\u6570
maxActive=20
#\u5B9A\u4E49\u6700\u5C0F\u8FDE\u63A5\u6570
minActive=2
#\u5B9A\u4E49\u6700\u957F\u7B49\u5F85\u65F6\u95F4
maxWait=60000
#\u662F\u5426\u5728\u8FDE\u63A5\u5173\u95ED\u65F6\u81EA\u52A8\u63D0\u4EA4\u4E8B\u52A1
autoCommitOnClose=false
#\u5F53\u83B7\u53D6\u8FDE\u63A5\u5931\u8D25\u91CD\u8BD5\u6B21\u6570
acquireRetryAttempts=5

编写日志配置文件log4j.properties

log4j.rootLogger=info, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

编写MyBatis发生器(MBG)文件generatorConfig.xml

MyBatis发生器(MBG)是一个用于MyBatis的代码生成器。
它将为所有版本的MyBatis生成代码。
它将反省一个数据库表(或多个表),并将生成的工件可以使用访问表(s)。
这减少初始设置对象的麻烦和配置文件与数据库表进行交互。
MBG试图作出重大影响大部分的数据库操作简单的CRUD(创建、检索、更新、删除)。
你仍然需要手工编写SQL和对象连接查询,或存储过程。

新建一个maven配置,并在命令行输入mybatis-generator:generate

创建完成后运行maven配置,自动创建上述文件
修改下图配置的tableNamedomainObjectName完成数据库其余表的创建

在main目录下新建java文件夹

在src目录下新建test文件夹

创建java包并创建测试类
在test类上创建注解

@RunWith(SpringJUnit4ClassRunner.class)
//加载Spring配置文件
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})

进行单元测试

项目整体框架

今天项目中所遇到的问题

在进行单元测试过程中,出现了一个错误,如下

java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring-mybatis.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: com/microsoft/schemas/vml/STStrokeArrowWidth
Caused by: java.lang.NoClassDefFoundError: com/microsoft/schemas/vml/STStrokeArrowWidth
Caused by: java.lang.ClassNotFoundException: com.microsoft.schemas.vml.STStrokeArrowWidth

原因:JDK版本问题
解决办法:我的的JDK版本为17,改成1.8后好了

  1. 在pom.xml文件中修改项目的jdk版本,然后重新加载项目
  2. 打开项目结构,将项目的SDK版本、模块源的语言级别、模块的依赖SDK版本都改成1.8