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