SpringBoot从零开始的问答社区 (1)数据库初始化测试-Mybatis+MariaDB

代码仓库

Github->https://github.com/noahlin27/Astera

Gitee->Astera: Astera project for Spring Boot

创建SpringBoot项目

推荐官方的 spring 项目初始化服务器 https://start.spring.io/

也可以在 Intellij IDEA 里创建

选择 maven 进行项目构建和项目管理,初始化项目之前可以自定义添加依赖(Dependencies)

连接MariaDB数据库,测试数据库初始化

配置MariaDB数据库连接

添加 MariaDB 的依赖

<dependency>
	<groupId>org.mariadb.jdbc</groupId>
	<artifactId>mariadb-java-client</artifactId>
	<scope>runtime</scope>
</dependency>

更改项目配置文件(我习惯用 yml 风格),添加数据源配置

spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    username: root
    password: {password}
    url:jdbc:mariadb://localhost:3306/{db_name}?useUnicode=true&
         serverTimezone=Asia/Shanghai&characterEncoding=utf8&
         autoReconnect=true&useSSL=false&allowMultiQueries=true

下面就正式开始写代码了,我选择用自己相对熟悉的 MVC模式 进行开发。

建立实体类和DAO接口

创建 model 层的实体类 User,成员变量和数据库字段一一对应,并为每个成员变量提供get、set方法。

接着写对应的 dao 层接口 UserDAO,提供操作数据库的方法。

首先添加 mybatis 依赖

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.2.0</version>
</dependency>

方法一:

@Insert 注解的方式写一个插入记录行的方法 insert()

    @Insert({"insert into", TABLE_NAME, "(", INSERT_FIELDS, ") values (#{变量1}, #{变量2}, ...)"})
    int insert(User user);

方法二:

用 mapper 文件的方式实现,在 resources 目录中添加 mapper 目录,创建 UserMapper.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="{UserDAO接口的包路径},如top.noahlin.astera.dao.UserDAO">
    <insert id="insertUser" parameterType="{User类的包路径},如top.noahlin.astera.model.User">
        insert into TABLE_NAME (字段1, 字段2, ...)
        values (#{变量1}, #{变量2}, ...)
    </insert>
</mapper>

在配置文件中添加 mybatis 配置

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

两种实现操作数据库方法的对比:

注解的方法比较简洁方便

mapper 配置文件的方法可以实现分支、循环等逻辑结构(以后在项目中会用到)

单元测试

在 test 目录下的项目包同名目录中创建 InitDatabaseTests 类,在启动类添加 @Sql 注解执行 sql建表文件创建数据表,sql 文件路径默认以 resources 目录为根目录,比如下面代码中对应的    init-schema.sql 文件应位于 resources 目录下。

@Sql("/init-schema.sql")

在启动类添加 @MapperScan 注解,Mybatis 会有一个拦截器自动地扫描这些包路径下的类,自动地为它们生成代理类

@MapperScan("top.noahlin.astera.dao")

添加 @Resouce 注解注入 UserDAO

也可以使用 @Autowired 注解,用 @Autowired 注解 IDEA 编辑器会报错,但运行程序时没有报错,DAO 接口提供的方法可以被正常执行

    @Resource
    UserDAO userDAO;

另一种生成代理类的方式是在 UserDAO 接口添加 @Mapper 注解,Mybatis 有一个拦截器,会自动地把 @Mapper 注解的接口生成动态代理类,这时使用 @Autowired 注解注入 UserDAO 不会出现编辑器的报错

BUG回顾

(1)空指针异常java.lang.NullPointerException

问题原因:

(CSDN博客)在正常单元测试中,我们向方法上添加 @Test 注解即可,但是在 springboot 中我们要使用类似控制器注入方法,或者注入 dao 层方法,这种自动装配的类就可能会注入失败,报空指针异常 java.lang.NullPointerException

简单概括,在测试类中,dao 层的方法没有被正确注入,从图中 debug 情况可以看到 userDao 的值为 null。在运行项目时不存在这个问题。

解决方法:

在测试类上添加 @RunWith 和 @SpringBootTest 两个注解

@RunWith(SpringRunner.class)
@SpringBootTest

(2)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 [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]……(报错信息太长,不完整复制了)

问题原因:

最终发现导致报错是因为在项目配置文件中配置了 mybatis 的 mapper-locations 同时 mapper 目录下的文件配置有错误(空的 xml 文件也不行)

解决方法:

如果选择了使用 @Insert 方式实现 dao 接口的方法,可以注释掉项目配置文件中的 mybatis mapper-locations 配置;

或者把 mapper 目录下的 UserDAO.xml 配置文件改成正确的。

(3)org.junit.runners.model.InvalidTestClassError: Invalid test class

No runnable methods

问题原因:

@Test注解导入的包有问题

解决方法:

import org.junit.Test;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学籍管理系统是一个用于管理学生的基本信息、课程信息和成绩信息的系统。基于Vue3、Element Plus、Spring BootMyBatis、JPA和MySQL的学籍管理系统具有以下特点和功能。 1. 前端界面使用Vue3和Element Plus框架,实现了美观、简洁的用户界面,提供了良好的用户体验。 2. 后端使用Spring Boot作为应用框架,简化了系统的搭建和开发。同时,基于MyBatis和JPA技术实现与数据库的交互,提供高性能和灵活性。 3. 数据库使用MySQL,存储学生的基本信息、课程信息和成绩信息,保证了数据的持久性和安全性。 4. 学籍管理系统提供了学生信息的录入、查询和修改功能。管理员可以通过界面录入学生的基本信息,包括姓名、学号、性别、年龄等。同时,还可以查询和修改学生的信息,确保信息的准确性。 5. 系统还提供了课程信息的管理功能。管理员可以录入课程的名称、学分、教师等信息,方便学生选课和教师进行课程管理。 6. 学籍管理系统还包括成绩管理功能。管理员可以录入学生的成绩,系统会自动计算学生的平均成绩和绩点,并提供成绩查询功能,方便学生和教师查看学生成绩。 7. 系统还提供了权限管理功能,确保只有授权用户可以进行相关操作,保证了数据的安全性。 综上所述,基于Vue3、Element Plus、Spring BootMyBatis、JPA和MySQL的学籍管理系统具有方便、快捷、安全、准确的特点,能够有效管理学生的基本信息、课程信息和成绩信息。在教育领域的学籍管理中具有重要的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值