MyBatis【MyBatis的增删改查操作与单元测试】(上)

简介: MyBatis【MyBatis的增删改查操作与单元测试】(上)

🍎一.单元测试


🍒1.1 什么是单元测试?


单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试

单元测试是开发者编写的⼀⼩段代码,⽤于检验被测代码的⼀个很⼩的、很明确的(代码)功能是否正确。执⾏单元测试就是为了证明某段代码的执⾏结果是否符合我们的预期。如果测试结果符合我们的预期,称之为测试通过,否则就是测试未通过(或者叫测试失败)


🍒1.2 单元测试好处


  1. 可以⾮常简单、直观、快速的测试某⼀个功能是否正确(可以搭配日志打印)
  2. 使⽤单元测试可以帮我们在打包的时候,发现⼀些问题,因为在打包之前,所以的单元测试必须通过,否则不能打包成功(不用手动测试)
  3. 使⽤单元测试,在测试功能的时候,可以不污染连接的数据库,也就是在不对数据库进⾏任何改变的情况下,测试功能(有事务回滚机制)


🍒1.3 Spring Boot 框架 单元测试使用


Spring Boot 项⽬创建时会默认单元测试框架 spring-boot-test,⽽这个单元测试框架主要是依靠另⼀个著名的测试框架 JUnit 实现的,打开 pom.xml 就可以看到,以下信息是 Spring Boot 项⽬创建是⾃动添加的:


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

如果pom.xml文件内没有我们可以手动添加


🍒1.4 单元测试实现


在我们创建的XXXMapper接口中


b21748bf7bfa45ac918b054301a1e5f6.png


bab951f5114640689835fdb7bae70d19.png


53f9b75df5c14321a2f44efdbdf18e2d.png

@Slf4j注解 打印日志

@Resource注解进行UserMapper属性注入


25af9c6aaa464159a901bb91c7fa0c42.png


4f06f4fbb9954004b1637046b1da5491.png

🍒1.5 断言

import com.example.demo.model.User;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@SpringBootTest
class UserControllerTest {
    @Resource
    private UserController userController;
    @Test
    void save() {
       User user = new User();
       user.setId(1);
       user.setName("Java Test");
       user.setPassword("123");
       boolean result = userController.save(user);
       // 使⽤断⾔判断最终的结果是否符合预期
       Assertions.assertEquals(true, result);
       // Assertions.assertTrue(result);
    }
}

image.png


🍎二.MyBatis修改操作


UserMapper接口修改用户信息方法:


ae8b9c8c5a4e409f895e987c65d54916.png


UserMapper.xml 进行SQL修改用户信息语句传输:


1b472fc8019446d1932eeda2520f3af3.png

单元测试:

5955a96a0b304235ae43287b7ab95fed.png


单元测试结果:


df37921450d443a88a82f2a467911f89.png


🍎三.MyBatis删除操作


UserMapper接口删除用户信息方法:


// 删除方法{根据id删除这一条数据}
    public int del(@Param("id") Integer id);


UserMapper.xml 进行SQL删除用户信息语句传输:


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

单元测试:


@Test
    @Transactional
    void del() {
        int result = userMapper.del(2);
        System.out.println(result);
    }


单元测试解结果:

07f1119b8b214d259db945c1a4d139cf.png

🍎四.MyBatis增加操作


🍒4.1 MyBatis增加操作


UserMapper接口增加用户信息方法:


// 添加方法
    public int add(UserInfo userInfo);


UserMapper.xml 进行SQL增加用户信息语句传输:

 <!-- 添加用户,返回受影响的行数 -->
    <insert id="add">
        insert into userinfo(username,password,photo)
        values(#{username},#{password},#{photo})
    </insert>

单元测试:'

 @Test
    void add() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("王五");
        userInfo.setPassword("123");
        userInfo.setPhoto("default.png");
        int result = userMapper.add(userInfo);
        System.out.println(result);
    }

单元测试解结果:'

ab101b6ef2544ed1a4e3b8cdd7cc000e.png

🍒4.2 MyBatis增加操作(返回自增id)


默认情况下返回的是受影响的⾏号,如果想要返回⾃增 id,具体实现如下


UserMapper接口增加用户信息方法:'


 // 添加方法
    // 添加用户返回受影响的行数
    public int addGetId(UserInfo userInfo);

UserMapper.xml 进行SQL增加用户信息语句传输:

●useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据库内部⽣成的主键
(⽐如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的⾃动递增字段),默认值:false
●keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使⽤ getGeneratedKeys 的返回值或 insert 语句的 selectKey ⼦元素设置它的值,
默认值:未设置(unset)。如果⽣成列不⽌⼀个,可以⽤逗号分隔多个属性名称
<!-- 添加用户,返回受影响的行数和自增id -->
    <insert id="addGetId" useGeneratedKeys="true" keyProperty="id">
        insert into userinfo(username,password,photo)
        values(#{username},#{password},#{photo})
    </insert>

单元测试:

 @Test
    void addGetId() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("王五");
        userInfo.setPassword("123");
        userInfo.setPhoto("default.png");
        System.out.println("添加之前 user id:" + userInfo.getId());
        int result = userMapper.addGetId(userInfo);
        System.out.println("受影响的行数:" + result);
        System.out.println("添加之后 user id:" + userInfo.getId());
    }

单元测试解结果:


05d629a39a9c4c80b78633c3ca3b661e.png

相关文章
|
3月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
4月前
|
SQL Java 数据库
2、Mybatis-Plus 测试增、删、改、查
这篇文章是关于使用Mybatis-Plus进行数据库的增删改查操作的本地测试,包括创建数据库表、添加数据、创建使用lombok的实体类、添加mapper接口以及编写测试代码进行基本的数据库操作验证。
2、Mybatis-Plus 测试增、删、改、查
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
58 1
|
5月前
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
234 3
|
6月前
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
130 3
我们后端程序员不是操作MyBatis的CRUD Boy
|
4月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
377 0
|
5月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
6月前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
81 2
|
5月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法