SpringBoot单元测试 Mybatis:增删改查

简介: SpringBoot单元测试 Mybatis:增删改查

一:SpringBoot单元测试

1.1什么是单元测试?

单元测试:指对软件的最小可测单元(方法)进行检查和验证的过程就叫单元测试.

1.2 单元测试有哪些好处?

1:方便,快速测试一个功能模块(方法级别).

2:单元测试在打包的时候会验证所有的方法是否符合预期,如果不符合预期,会打包失败.

3:单元测试在测试的时候,不污染数据库,来测试某个功能的正确性=====>依据数据库的事务进行管理

1.3单元测试的使用

1.3.1添加框架的依赖

a):在pom.xml自动加入,springboot内置了测试的依赖,内置了Junit

1.3.2执行单元测试

1.3.2.1生成单元测试类

1.3.2.2添加测试的代码
@SpringBootTest//表明当前单元测试是在springboot中
class UserMapperTest {
    //注入测试的对西昂
    @Autowired
    private  UserMapper userMapper;
    @Test
    void getUserById() {
        //单元测试的业务代码
        List<UserInfo> userById = userMapper.getUserById(1);
        for (UserInfo userInfo : userById) {
            System.out.println(userInfo);
        }
    }
}

运行结果:

二:Mybatis实现数据库的增删查改

2.1查询数据库所有的数据

//mapper目录下的
@Mapper//添加mapper,随着spring的启动而启动
public interface UserMapper {
    //根据用户的ID查询用户的信息
    public List<UserInfo> getUserById(Integer id);
//    public List<UserInfo> getUserById();
   //查询所有的用户
    List<UserInfo> getAll();
}
<?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="com.example.demo10.mapper.UserMapper">
     <select id="getUserById" resultType="com.example.demo10.entity.UserInfo">
         select * from userinfo where id=#{id}
--             select * from userinfo
     </select>
    <select id="getAll" resultType="com.example.demo10.entity.UserInfo" >
        select * from userinfo
    </select>
</mapper>

对XML配置中的解释

2.2在数据库中添加数据

2.2.1在接口中声明方法

@Mapper
public interface UserMapper {
    //根据用户的ID查询用户的信息
    public List<UserInfo> getUserById(Integer id);
//    public List<UserInfo> getUserById();
   //查询所有的用户
    List<UserInfo> getAll();
    //添加数据
    int  add(UserInfo userInfo);
}

2.2.2在XML中实现

<mapper namespace="com.example.demo10.mapper.UserMapper">
    <insert id="add">
        insert into userinfo(username, password, createtime, updatetime) values(#{username},#{password},#{createtime},
                    #{updatetime}                                                            )
    </insert>

如何已经添加的用户的ID?====>修改XML中的配置

XML中的配置

<insert id="addId" useGeneratedKeys="true" keyProperty="id">
        insert into  userinfo(username,password,createtime,updatetime) values(#{username},#{password},#{createtime}
        ,#{updatetime})
    </insert>

接口的类

@Mapper
public interface UserMapper {
    //根据用户的ID查询用户的信息
    public List<UserInfo> getUserById(Integer id);
//    public List<UserInfo> getUserById();
   //查询所有的用户
    List<UserInfo> getAll();
    //添加数据
    int  add(UserInfo userInfo);
   //添加数据,获取用户的ID
    int  addId(UserInfo userInfo);
}

2.2.3在数据库中修改数据

XML中SQL语句

<update id="upUser">
        update userinfo set username=#{username} where id=#{id}
    </update>

接口中的声明方法

//修改数据--->根据对象进行修改
    int upUser(UserInfo userInfo);

2.2.4数据库中删除数据

XML中的文件

<delete id="delById">
        delete  from userinfo where id=#{id}
    </delete>

接口中的声明方法

//删除数据
    int delById(@Param("id") Integer id);

三:不污染数据库的注解@Transactional

@SpringBootTest//表明当前单元测试是在springboot中
@Transactional    //不污染数据库,执行完之后撤销事务,也可以在测试的方法加入这个注解
class UserMapperTest {
    //注入测试的对西昂
    @Autowired
    private  UserMapper userMapper;
    @Test
    void getUserById() {
        //单元测试的业务代码
        List<UserInfo> userById = userMapper.getUserById(1);
        for (UserInfo userInfo : userById) {
            System.out.println(userInfo);
            Assertions.assertEquals("admin",userInfo.getUsername());
        }
        //添加断言,判断当前方法是否正确
    }
    @Test
    void getAll() {
        List<UserInfo> list=userMapper.getAll();
        for (UserInfo userInfo : list) {
            System.out.println(userInfo);
            Assertions.assertEquals(1,list.size());
        }
    }
    @Test
    void add() {
        UserInfo userInfo=new UserInfo();
        userInfo.setUsername("李明轩");
        userInfo.setPassword("123456");
        userInfo.setCreatetime(LocalDateTime.now());
        userInfo.setUpdatetime(LocalDateTime.now());
        int add = userMapper.add(userInfo);
        Assertions.assertEquals(1,add);
    }
    @Test
    void addId() {
        UserInfo userInfo=new UserInfo();
        userInfo.setUsername("李明轩");
        userInfo.setPassword("123456");
        userInfo.setCreatetime(LocalDateTime.now());
        userInfo.setUpdatetime(LocalDateTime.now());
        int add = userMapper.addId(userInfo);
        System.out.println(userInfo.getId());
        Assertions.assertEquals(1,add);
    }
    @Test
    void upUser() {
        UserInfo userInfo=new UserInfo();
        userInfo.setId(1);
        userInfo.setUsername("老一");
        int i = userMapper.upUser(userInfo);
        System.out.println(i);
        Assertions.assertEquals(1,i);
    }
    @Test
    void delById() {
        int i = userMapper.delById(1);
        Assertions.assertEquals(1,i);
    }
}

四:#和$的区别

#{}:预编译处理

${}:字符直接替换

#和$在参数的类型中,int类型没有区别。

当使用$的时候,直接进行替换,#不直接进行替换,使用的占位符,即加‘’。

当是MySQL的关键字的时候,用${},例如 desc / asc 等。

相关文章
|
13天前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
81 2
|
29天前
|
XML Java 测试技术
【SpringBoot系列】初识Springboot并搭建测试环境
【SpringBoot系列】初识Springboot并搭建测试环境
60 0
|
24天前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
34 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
24天前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
71 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
24天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
39 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
216 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
23天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
35 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
24天前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
14 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
25天前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
35 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学