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

相关文章
|
7月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
791 0
|
3月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
911 2
|
10月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
538 0
|
7月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1253 1
Spring boot 使用mybatis generator 自动生成代码插件
|
6月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
282 0
|
7月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
398 5
|
7月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
287 1
|
6月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
189 0
|
7月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
301 1
|
10月前
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
339 21