2.零时尚商城--整合Mybatis,单元测试,整合Druid,项目整合测试

10 篇文章 0 订阅
6 篇文章 0 订阅

零时尚商城-后端项目搭建

本篇任务:
1.在博客1的基础上,完成整合Mybatis
2.单元测试
3.整合Driud
4.项目整合的测试

1.整合Mybatis

1.4.1 common子工程

  • lombok

1.4.2 beans子工程

  • lombok

1.4.3 mybatis子工程–整合mybatis

  • 在mapper子工程的pom文件中,新增mybatis所需的依赖
		<!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--spring-boot-starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.4.4</version>
        </dependency>
        <!--mybatis-starter-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
  • mapper子工程的resources目录创建application.yml
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/zerofashion_boot?characterEncording=utf-8
    username: root
    password: 123456
mybatis:
  mapper-locations: classpath:mappers/*Mapper.xml
  type-aliases-package: com.yty.zeromall.entity

在这里插入图片描述
这里注意,这个·实体类·别名路径是在beans模块下,我这里是mapper模块进行其别名配置,既然我这里引用了这个路径,那么beans模块的实体类的路径应该和这里一样才能调用成功!
在这里插入图片描述

  • 在api子工程的启动类通过@MapperScan声明dao包的路径
@SpringBootApplication
@MapperScan("com.yty.zeromall.dao")
public class ApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
    }

}

这里和上面同理。

2.单元测试

先去mapper子模块加test的依赖

		<!--要进行单元测试就得加这个-->
        <!--mybatis-test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

1.beans

User

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private int userId;
    private int userName;
    private int userAge;
}

2.mapper

UserDao

public interface UserDao {
    //通过姓名查询
    public User queryUserByName(String name);
}

UserMapper.xml

<?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.yty.zeromall.dao.UserDao">

    <resultMap id="userMapYTY" type="User">
        <id column="user_id" property="userId"></id>
        <result column="user_name" property="userName"></result>
        <result column="user_age" property="userAge"></result>
    </resultMap>

    <!--查询-->
    <select id="queryUserByName" resultMap="userMapYTY">
        select user_id,user_name,user_age
        from users
        where user_name=#{name};
    </select>

</mapper>

3.测试

在要测试的dao下,然后直接alt+insert(Fn)
在这里插入图片描述
然后:
在这里插入图片描述
点击OK后,就会是:
在这里插入图片描述
然后修改:
在这里插入图片描述
运行报 初始化 错误:
在这里插入图片描述

2.1 解决方法

这是因为springboot的单元测试需要运行一个main方法,也就是启动类,通过启动类加载配置。
所以要让@SpringBootTest去指定启动类。
启动类在api模块中,也就是controller模块中,但是我的mapper模块又没依赖api,所以只能将测试放到api里面去进行,并将依赖也加进去。
如图:直接将文件夹复制过去
在这里插入图片描述
然后DeBug测试一下:
在这里插入图片描述
然后继续运行:
在这里插入图片描述
值得注意是:我上面查询的是‘CURRY’,所以查询结果为null,这是由于数据库中没有这条数据。改成已有的数据,就能查出来全部数据了。

至此,单元测试成功!

3. 整合Druid

因为数据源肯定是和mapper打交道,也就是mybatis,所以在mapper模块中添加druid依赖。
默认是Hikara数据源,我们改成Druid数据源。

3.1 添加druid-starter依赖

		<!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.22</version>
        </dependency>		

3.2.修改yml文件

在这里插入图片描述

3.3运行启动类测试

控制台发现已经:初始化druid数据源了
在这里插入图片描述

4.项目整合测试

用登录来进行整合的测试。

4.1 UserService

因为之前单元测试的时候没有加入数据库中user_pwd字段,在这里补上。实体,mapper.xml中都要加入对应的。
UserService

public interface UserService {

    //1.登录
    public User checkLogin(String name,String pwd);

}

UserServiceImpl

@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;

    //1.登录
    @Override
    public User checkLogin(String name, String pwd) {
        //1.1 根据账号查询用户信息
        User user = userDao.queryUserByName(name);

        //1.2 判断
        if (user == null){
            //用户名不存在
        }else {
            //1.3 对输入的密码pwd进行加密
            //使用加密后的密码 和 user中的密码进行匹配
            if (user.getUserPwd().equals(pwd)){
                //验证成功
            }else {
                //密码错误
            }
        }

        return null;
    }
}

此代码为伪代码,中文字处少了对应的代码。

4.2 VO对象

那我们怎么把上述这些信息返回给前端呢?这个时候我们就不再返回user对象,而是返回一个自定义的vo对象。
因为user包含我们要的用户信息,但是它并不包含提示用户的信息。而vo就可以。
在这里插入图片描述

ResultVO

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResultVO {

    //响应给前端的状态码
    private int code;
    //响应给前端的提示信息
    private String msg;
    //响应给前端的数据
    private Object data;

}

因此我们的UserService就不用返回对象user了,而是对象ResultVO了
UserSerice

public interface UserService {

    //1.登录
    public ResultVO checkLogin(String name, String pwd);

}

UserServiceImpl
在这里插入图片描述

@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;

    //1.登录
    @Override
    public ResultVO checkLogin(String name, String pwd) {
        //1.1 根据账号查询用户信息
        User user = userDao.queryUserByName(name);
        //1.2 判断
        if (user == null){
            //用户名不存在
            return new ResultVO(10001,"用户名不存在!",null);
        }else {
            //1.3 对输入的密码pwd进行加密
            //使用加密后的密码 和 user中的密码进行匹配
            if (user.getUserPwd().equals(pwd)){
                //验证成功
                return new ResultVO(10000,"登录成功!",user);
            }else {
                //密码错误
                return new ResultVO(10001,"密码错误",null);
            }
        }
    }
}

此时,我们返回给前端的就是一个vo对象。

4.3 UserController

前后端分离我们都是:异步。所以直接在类上加@ResponseBody–代表这个controller所有的请求都是异步请求,返回的都是json数据。

controller就做一件事,那就是接收请求,响应转给service。由service进行业务操作。
在这里插入图片描述

@Controller
@ResponseBody//表这个controller所有的请求都是异步请求,返回的都是json数据。
@RequestMapping("/user")//窄化请求
public class UserController {
    @Resource
    private UserService userService;

    //1.登录
    @RequestMapping("/login")
    public ResultVO login(String name,String pwd){
        return userService.checkLogin(name, pwd);
    }

}

4.4 启动测试!

因为现在是一个聚合工程,特点:要想运行启动类,就要先进行打包。开发环境是可以直接运行的,但是在最后的时候最好在父工程中进行一个打包。
在这里插入图片描述

测试:

1.数据库表数据:
在这里插入图片描述
2.输入正确的用户和密码
在这里插入图片描述
3.输入错误的密码
在这里插入图片描述
4.输入不存在的用户
在这里插入图片描述
5.总结
发现每种不同的情况,都能对应我们VO对象,这就是VO的好处,能给到提示信息!
同时,项目整合没问题!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

11_1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值