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 等。

相关文章
|
8天前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
21天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
8天前
|
SQL JSON Java
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
本文为Spring Boot增删改查接口的小白入门教程,介绍了项目的构建、配置YML文件、代码编写(包括实体类、Mapper接口、Mapper.xml、Service和Controller)以及使用Postman进行接口测试的方法。同时提供了SQL代码和完整代码的下载链接。
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
|
8天前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
22天前
|
JavaScript 前端开发 Java
Spring Boot+cucumber+契约测试
Spring Boot+cucumber+契约测试
12 0
Spring Boot+cucumber+契约测试
|
1月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
30 1
|
2月前
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
93 1
|
2月前
|
Java 测试技术
SpringBoot单元测试快速写法问题之区分链路环节是否应该被Mock如何解决
SpringBoot单元测试快速写法问题之区分链路环节是否应该被Mock如何解决
|
2月前
|
SQL Java 测试技术
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
|
29天前
|
Java 数据库连接 开发者
MyBatis-Plus整合SpringBoot及使用
MyBatis-Plus为MyBatis提供了强大的增强,使得在Spring Boot项目中的数据访问层开发变得更加快捷和简便。通过MyBatis-Plus提供的自动CRUD、灵活的查询构造器和简洁的配置,开发者
36 0
下一篇
无影云桌面