SpringBoot单元测试 Mybatis:增删改查

目录

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

SpringBoot单元测试 Mybatis:增删改查_第1张图片

1.3.2执行单元测试 

1.3.2.1生成单元测试类

SpringBoot单元测试 Mybatis:增删改查_第2张图片

SpringBoot单元测试 Mybatis:增删改查_第3张图片 

 1.3.2.2添加测试的代码
@SpringBootTest//表明当前单元测试是在springboot中
class UserMapperTest {
    //注入测试的对西昂
    @Autowired
    private  UserMapper userMapper;

    @Test
    void getUserById() {
        //单元测试的业务代码
        List userById = userMapper.getUserById(1);
        for (UserInfo userInfo : userById) {
            System.out.println(userInfo);
        }
    }
}

运行结果: 

SpringBoot单元测试 Mybatis:增删改查_第4张图片

SpringBoot单元测试 Mybatis:增删改查_第5张图片 

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

2.1查询数据库所有的数据

//mapper目录下的
@Mapper//添加mapper,随着spring的启动而启动
public interface UserMapper {
    //根据用户的ID查询用户的信息
    public List getUserById(Integer id);
//    public List getUserById();
   //查询所有的用户
    List getAll();

}



     
    

对XML配置中的解释 

SpringBoot单元测试 Mybatis:增删改查_第6张图片 

2.2在数据库中添加数据 

2.2.1在接口中声明方法

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

}

2.2.2在XML中实现


    
        insert into userinfo(username, password, createtime, updatetime) values(#{username},#{password},#{createtime},
                    #{updatetime}                                                            )

    

SpringBoot单元测试 Mybatis:增删改查_第7张图片

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

XML中的配置


        insert into  userinfo(username,password,createtime,updatetime) values(#{username},#{password},#{createtime}
        ,#{updatetime})
    

接口的类

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

SpringBoot单元测试 Mybatis:增删改查_第8张图片

 2.2.3在数据库中修改数据

XML中SQL语句


        update userinfo set username=#{username} where id=#{id}
    

接口中的声明方法

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

2.2.4数据库中删除数据 

XML中的文件

 
        delete  from userinfo where id=#{id}
    

接口中的声明方法

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

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

@SpringBootTest//表明当前单元测试是在springboot中
@Transactional    //不污染数据库,执行完之后撤销事务,也可以在测试的方法加入这个注解

class UserMapperTest {
    //注入测试的对西昂
    @Autowired
    private  UserMapper userMapper;

    @Test
    void getUserById() {
        //单元测试的业务代码
        List userById = userMapper.getUserById(1);
        for (UserInfo userInfo : userById) {
            System.out.println(userInfo);
            Assertions.assertEquals("admin",userInfo.getUsername());
        }
        //添加断言,判断当前方法是否正确
    }



    @Test
    void getAll() {
        List 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 等。

你可能感兴趣的:(Spring全家桶,mybatis,spring,java)