SpringBoot单元测试 Mybatis:增删改查

本文介绍了SpringBoot中的单元测试用法,包括其重要性、如何添加框架依赖并编写测试代码。同时详细讲解了Mybatis如何实现数据库的增删查改操作,以及使用@Transactional注解避免数据库污染。
摘要由CSDN通过智能技术生成

目录

一:SpringBoot单元测试

1.1什么是单元测试?

1.2 单元测试有哪些好处?

1.3单元测试的使用

1.3.1添加框架的依赖

1.3.2执行单元测试 

1.3.2.1生成单元测试类

 1.3.2.2添加测试的代码

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

2.1查询数据库所有的数据

2.2在数据库中添加数据 

2.2.1在接口中声明方法

2.2.2在XML中实现

 2.2.3在数据库中修改数据

2.2.4数据库中删除数据 

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

四:#和$的区别


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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DJ懒羊羊。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值