【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

这篇具有很好参考价值的文章主要介绍了【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Spring-Boot单元测试(了解)

1.1 概念

  1. 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在Java中单元测试的最小单元是类

  2. 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。执行单元测试,就是为了证明这段代码的行为和我们期望是否一致

1.2 单元测试引用

使用单元测试需要引入依赖,一般框架都已经自动注入了该依赖 !!

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

原理:

通过spring initialize创建的Spring Boot项目会在Maven中自动携带很多starter依赖,而其中就存在该测试依赖 !

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

1.3 单元测试的实现

  1. 生成单元测试的类
    在接口层中,右击鼠标点击Generate选择Test
    【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

以下就生成了该接口的测试类,并有接口中声明方法对应的测试方法

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

  1. 配置单元测试的类
    添加 @SpringBootTest 注解,再添加业务代码
//1、必须添加以下注解:该注解表示,以下测试单元代码 是在 Spring 中运行的
@SpringBootTest
@Slf4j
class UserInfoMapperTest {
    //2、添加需要测试单个功能的代码
    @Resource
    private UserInfoMapper userInfoMapper;

    @Test
    void getUserById() {
        UserInfo userInfo = userInfoMapper.getUserById(1);
        // System.out.println(userInfo);  此时只是打印结果,无论代码是否错误,单元测试都会通过
        //以下 使用断言 来检测单元测试结果 ! 我们可以 设置 id 为确实存在于数据库的,如果测试单元不通过就说明上述功能代码存在问题
        //通过功能代码查询到的对象结果 和 Null 进行对比(还有很多其他方法,结果和True对比等),如果不为空的话,单元测试就会成功
        Assertions.assertNotNull(userInfo);
    }

注意:

  1. 必须添加 @SpringBootTest 注解:该注解表示,以下测试单元代码 是在 SpringBoot中运行的

  2. 如果使用的是科学版IDEA,在Test测试代码中使用 @Autowired 注入注解会报错因为:@Mapper来自mybatis框架,而@Autowired 来自 spring,没有兼容性。而使用JDK官方的@Resource可以

1.4 简单的断言说明

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

使用方法如上述代码 !

1.5 单元测试优点

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

上述内容只是大概认识了解下单元测试,详细内容参考这里 !


二、Mybatis 增,删,改 操作

在前面我们已经创建了第一个 mybatis 项目,并完成了简单的查询操作!后续执行的增删改操作大体步骤相似,需要更改 xml 文件中部分标签,下面我们就来学习 !

下面示例为了方便,我们就不依次完成各层书写,只需要把接口层补充完整,并完成 xml 文件的代码,再通过单元测试来验证结果 !!

注意:如果你不想破坏数据库的数据,可以使用 注解 @Transaction 进行事务回滚

2.1 增加⽤户操作

mapper 接口层实现:

package com.example.demo.mapper;

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface UserInfoMapper {
    public int addUser(UserInfo userInfo);
  }

相应的 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">
<!--namespace 需要实现的接口的具体包名加接口名-->
<mapper namespace="com.example.demo.mapper.UserInfoMapper">

    <!-- 添加用户 此时#{}获取的参数,就是用户表中对应的属性-->
    <insert id="addUser">
        insert into userinfo(username, password, photo)
        values (#{username}, #{password}, #{photo})
    </insert>
    
</mapper>

生成对应的单元测试代码:

    @Test
    void addUser() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("guishao");
        userInfo.setPassword("526398");
        userInfo.setPhoto("default");
        int result = userInfoMapper.addUser(userInfo);
        Assertions.assertEquals(1,result);
    }

运行该测试方法,并观察结果:

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

查看数据库数据:

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

显而易见,我们成功的添加了一个用户 !!


特殊的添加:返回⾃增 id

xml 文件中的代码实现如下:

<!-- 添加用户 返回受影响的行数和自增id ! useGeneratedKeys:表示是否开起id自增
keyProperty:将自增的id值赋值给实体对象的哪个属性 keyColumn:将自增的id赋值给数据库中的哪一个字段-->
<insert id="addUser1" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
   insert into userinfo(username, password, photo)
   values (#{username}, #{password}, #{photo})
</insert>

标签说明:

  1. useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据
    库内部⽣成的主键(⽐如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的⾃动递
    增字段),默认值:false
  2. keyColumn:设置⽣成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列
    不是表中的第⼀列的时候,是必须设置的。如果⽣成列不⽌⼀个,可以⽤逗号分隔多个属性
    名称
  3. keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使⽤ getGeneratedKeys 的返回值
    或 insert 语句的 selectKey ⼦元素设置它的值,默认值:未设置(unset),如果⽣成列不⽌
    ⼀个,可以⽤逗号分隔多个属性名称

2.2 修改⽤户操作

mapper 接口层实现:

package com.example.demo.mapper;

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface UserInfoMapper {
   public int updateUserById(@Param("id") Integer ID,@Param("username") String Name);
 }

相应的 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">
<!--namespace 需要实现的接口的具体包名加接口名-->
<mapper namespace="com.example.demo.mapper.UserInfoMapper">

    <!--根据用户id 修改 姓名-->
    <update id="updateUserById">
        update userInfo
        set username = #{username}
        where id = #{id};
    </update>
    
</mapper>

生成对应的单元测试代码:

如:修改id=42的用户名为 goodman

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

@Test
void updateUserById() {
    int result = userInfoMapper.updateUserById(42,"goodman");
    Assertions.assertEquals(1,result);
}

查看数据库:

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

显而易见,我们成功修改了用户姓名 !!


2.3 删除⽤户操作

mapper 接口层实现:

package com.example.demo.mapper;

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface UserInfoMapper {
       public int delUserById(@Param("id") Integer ID);Name);
 }

相应的 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">
<!--namespace 需要实现的接口的具体包名加接口名-->
<mapper namespace="com.example.demo.mapper.UserInfoMapper">

    <!--根据用户id 删除 用户-->
    <delete id="delUserById">
        delete
        from userinfo
        where id = #{id}
    </delete>
    
</mapper>

生成对应的单元测试代码:

如删除数据库 id=42 的用户信息

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

@Test
void delUserById() {
     int result = userInfoMapper.delUserById(42);
     Assertions.assertEquals(1,result);
 }

查看数据库:

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

显而易见,我们成功的删除了 id=42 的用户信息 !!文章来源地址https://www.toymoban.com/news/detail-422875.html


到了这里,关于【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hbase-技术文档-spring-boot整合使用hbase--简单操作增删改查--提供封装高可用的模版类

    使用spring-boot项目来整合使用hbase。 依赖声明表示将把Apache HBase客户端库的2.4.3版本添加到项目中。HBase是一个分布式、可扩展的大数据存储系统,它基于Google的Bigtable模型,并使用了Hadoop分布式文件系统作为底层存储。HBase客户端库是用于与HBase数据库进行交互的工具库,提供

    2024年02月07日
    浏览(43)
  • Mybatis单元测试,不使用spring

    平时开发过程中需要对mybatis的Mapper类做单元测试,主要是验证语法是否正确,尤其是一些复杂的动态sql,一般项目都集成了spring或springboot,当项比较大时,每次单元测试启动相当慢,可能需要好几分钟,因此写了一个纯mybatis的单元测试基类,实现单元测试的秒级启动。 单元

    2024年02月16日
    浏览(33)
  • junit单元测试 mybatis 单独测试 springboot

    目录 省流: 正文 一、直接测(无需配置扫描和xml) 1. 场景 2. 无需配置扫描,直接在测试类注入Mapper 3. 报错 补充: 关于@RunWith 常见的报错: 1.包名不同导致报错 test目录下配置文件:application.yml中配置数据库信息。 test目录下各类:直接写测试类即可,直接调用main目录下各

    2024年02月07日
    浏览(53)
  • 【Spring Boot】单元测试

    单元测试在日常项目开发中必不可少,Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持,以及如何在Spring Boot项目中进行单元测试。 单元测试主要用于测试单个代码组件,以确保代码按预期方式工作。目前流行的

    2024年02月16日
    浏览(46)
  • Spring Boot单元测试

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 Spring Boot 中进行单元测试是一个常见的做法,可以帮助你验证应用程序的各个组件是否按预期工作。所以我们有必要去学习一番! 单元测试

    2024年02月13日
    浏览(48)
  • Spring boot 集成单元测试

    1.引入依赖 2.  3.编写测试类

    2024年02月11日
    浏览(51)
  • Mybatis 的多种标签使用以及 Spring 框架单元测试

    在讲解 Mybatis 的标签之前, 要先介绍一下另一个 Java 的好帮手 Spring 框架内置的 JUnit 测试框架. 为什么要在 Mybatis 学习之前了解 JUnit 呢 ? 很大一部分原因不仅仅是因为单元测试是写完项目后开发人员自己需要做的, 更重要的是当前阶段学习中, 利用 JUnit 可以更简单的构造数据来

    2024年02月09日
    浏览(56)
  • Spring Boot 单元测试 0基础教程

    咱们以一种通俗易懂的方式,通过一个简单的实例来教你怎么在Spring Boot项目中进行单元测试。 假设你有一个简单的Spring Boot应用,里面有一个UserService接口,以及它的实现类 UserServiceImpl,这个服务有一个方法用来获取用户的问候语。 为了对该方法进行单元测试,我们可以创

    2024年04月16日
    浏览(43)
  • Spring Boot异常处理和单元测试

    SpringBoot默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息 如 果我 们 需 要 将 所

    2024年03月17日
    浏览(40)
  • Spring Boot异常处理及单元测试

    SpringBoot默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息 如 果我 们 需 要 将 所

    2024年01月19日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包