目录
一: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
四:#和$的区别
单元测试:指对软件的最小可测单元(方法)进行检查和验证的过程就叫单元测试.
1:方便,快速测试一个功能模块(方法级别).
2:单元测试在打包的时候会验证所有的方法是否符合预期,如果不符合预期,会打包失败.
3:单元测试在测试的时候,不污染数据库,来测试某个功能的正确性=====>依据数据库的事务进行管理
a):在pom.xml自动加入,springboot内置了测试的依赖,内置了Junit
@SpringBootTest//表明当前单元测试是在springboot中
class UserMapperTest {
//注入测试的对西昂
@Autowired
private UserMapper userMapper;
@Test
void getUserById() {
//单元测试的业务代码
List userById = userMapper.getUserById(1);
for (UserInfo userInfo : userById) {
System.out.println(userInfo);
}
}
}
运行结果:
//mapper目录下的
@Mapper//添加mapper,随着spring的启动而启动
public interface UserMapper {
//根据用户的ID查询用户的信息
public List getUserById(Integer id);
// public List getUserById();
//查询所有的用户
List getAll();
}
对XML配置中的解释
@Mapper
public interface UserMapper {
//根据用户的ID查询用户的信息
public List getUserById(Integer id);
// public List getUserById();
//查询所有的用户
List getAll();
//添加数据
int add(UserInfo userInfo);
}
insert into userinfo(username, password, createtime, updatetime) values(#{username},#{password},#{createtime},
#{updatetime} )
如何已经添加的用户的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); }
XML中SQL语句
update userinfo set username=#{username} where id=#{id} 接口中的声明方法
//修改数据--->根据对象进行修改 int upUser(UserInfo userInfo);
XML中的文件
delete from userinfo where id=#{id} 接口中的声明方法
//删除数据 int delById(@Param("id") Integer id);
@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 等。