类似抖音的短视频管理系统+Java后端+vue前端(2)
![](https://gblog.luciferryf.eu.org/post-images/dy-project-2.jpg)
进行项目的基本配置以及项目的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配置,自动创建上述文件
修改下图配置的tableName
和domainObjectName
完成数据库其余表的创建
在main目录下新建java文件夹
![](https://gblog.luciferryf.eu.org/post-images/1676900839527.png)
在src目录下新建test文件夹
创建java包并创建测试类
在test类上创建注解
@RunWith(SpringJUnit4ClassRunner.class)
//加载Spring配置文件
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})
进行单元测试
项目整体框架
![](https://gblog.luciferryf.eu.org/post-images/1676901559756.png)
今天项目中所遇到的问题
在进行单元测试过程中,出现了一个错误,如下
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后好了
- 在pom.xml文件中修改项目的jdk版本,然后重新加载项目
- 打开项目结构,将项目的SDK版本、模块源的语言级别、模块的依赖SDK版本都改成1.8