SpringBoot整合SSM-junit测试

news2024/12/25 12:57:32

前提 :创建一个新的springboot模块

创建一个员工案例(搭建)

  1. 创建员工实体类
  2. 创建员工的控制层
  3. 创建员工的服务层(接口–实现类)
  4. 创建员工的数据层(接口–实现类)

以上的4种文件 是使用SSM必备的文件

创建员工实体类

  • 属性
  • get|set方法

理论上说 实体类是需要和数据库中的表格的列名一对一对应 在此处是任意命名属性 没有连接数据库

image-20230912103537979

实体类代码:

package top.yxqz.number2.entity;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description:员工实体类
 * 推荐安装插件 PTG 插件:快速生成JavaBean需要的东西、快速生成SQL语句
 * 快速生成JavaBean需要的东西 快捷键:ctrl+shift+逗号
 */
public class Employee {
    //    用户名
    private String userName;
    //    年龄
    private Integer age;
    //    密码
    private String password;


    public Employee() {
    }

    public Employee(String userName, Integer age, String password) {
        this.userName = userName;
        this.age = age;
        this.password = password;
    }

    /**
     * 获取
     * @return userName
     */
    public String getUserName() {
        return userName;
    }

    /**
     * 设置
     * @param userName
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }

    /**
     * 获取
     * @return age
     */
    public Integer getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(Integer age) {
        this.age = age;
    }

    /**
     * 获取
     * @return password
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    public String toString() {
        return "Employee{userName = " + userName + ", age = " + age + ", password = " + password + "}";
    }
}

控制层

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description:员工控制层 控制层推荐使用@Controller注解 但是我们只想要返回数据
 * 推荐使用@RestController注解
 */
@RestController
public class EmployeeController {
}

服务层

package top.yxqz.number2.service;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description: 为啥要创建服务层的接口 而不是直接创建服务层的实现类??
 * 在IOC中 获取Bean对象有多种方式  官方推荐使用接口类型来获取Bean对象(面向接口编程)
 * Bean对象实际上是接口类型的引用 指向的该接口的实现类(多态的性质)
 */
public interface EmployeeService {
}

创建服务层的实现类

在这里插入图片描述

package top.yxqz.number2.service.imp;

import org.springframework.stereotype.Service;
import top.yxqz.number2.service.EmployeeService;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description: 在服务层(业务层)推荐使用Service注解
 */
@Service
public class EmployeeServiceImp implements EmployeeService {
}

持久层

package top.yxqz.number2.dao;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description:
 */
public interface EmployeeDao {
}

持久层实现类

package top.yxqz.number2.dao.imp;

import org.springframework.stereotype.Repository;
import top.yxqz.number2.dao.EmployeeDao;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description:为了让Spring知道该类是持久层的bean 需要添加注解  (将该类交给IOC容器管理)
 * 这种思想————组件化思想
 * 在持久层 推荐使用@Repository注解
 */
@Repository
public class EmployeeDaoImp implements EmployeeDao {
}

获取员工信息(需求)

  1. 信息 理论来源于数据库,在此处未连接数据库 ,在持久层中模拟数据库获取数据——————持久层|数据层
  2. 需要将该信息的接口暴露给前端(写接口)——————控制层
  3. 实现接口(在业务层中实现接口)——————————服务层

推荐写功能的顺序:控制层----服务层—持久层

控制层代码

package top.yxqz.number2.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import top.yxqz.number2.entity.Employee;
import top.yxqz.number2.service.EmployeeService;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description:员工控制层 控制层推荐使用@Controller注解 但是我们只想要返回数据
 * 推荐使用@RestController注解
 */
@RestController
public class EmployeeController {


    @Autowired
    private EmployeeService employeeService;

    /**
     * 需求:获取员工的信息
     * 1.返回员工信息对象
     * 2.调用员工服务层实现
     */
    @GetMapping("/emp")
    public Employee getEmpObj() {
        return employeeService.getEmpObj();
    }
}

服务层(实现类)

package top.yxqz.number2.service.imp;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.yxqz.number2.dao.EmployeeDao;
import top.yxqz.number2.entity.Employee;
import top.yxqz.number2.service.EmployeeService;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description: 在服务层(业务层)推荐使用Service注解
 */
@Service
public class EmployeeServiceImp implements EmployeeService {

    @Autowired
    private EmployeeDao employeeDao;

    /**
     * 实现 获取员工信息的方法
     * 1.调用持久层|数据层 来实现
     *
     * @return
     */
    @Override
    public Employee getEmpObj() {
        return employeeDao.getEmpObj();
    }
}

持久层(实现类)

package top.yxqz.number2.dao.imp;

import org.springframework.stereotype.Repository;
import top.yxqz.number2.dao.EmployeeDao;
import top.yxqz.number2.entity.Employee;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description:为了让Spring知道该类是持久层的bean 需要添加注解  (将该类交给IOC容器管理)
 * 这种思想————组件化思想
 * 在持久层 推荐使用@Repository注解
 */
@Repository
public class EmployeeDaoImp implements EmployeeDao {
    /**
     * 制造数据(模拟从数据库获取数据)
     *
     * @return
     */
    @Override
    public Employee getEmpObj() {
        Employee employee = new Employee("鱼香茄子",22,"123456");
        return employee;
    }
}

获取员工信息(测试)

  1. 创建测试类
  2. 执行单元测试

image-20230912113007388

测试类代码

package top.yxqz.number2;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import top.yxqz.number2.controller.EmployeeController;
import top.yxqz.number2.entity.Employee;

/**
 * @author: 余小小
 * @date: 2023/9/12
 * @description:测试员工相关的接口功能 1.注入员工控制层
 * 2.调用相关方法 查看预期结果
 * 使用springboot的测试(不在讲解SSM中的测试方法)
 * 1.使用@SpringBootTest注解
 * 该注解的目的(功能):
 */
@SpringBootTest
public class TestEmployee {
    //    注入员工控制层
    @Autowired
    private EmployeeController employeeController;

    /**
     * @Test 是junit单元测试工具类的
     * 该方法 在类中要满足 java方法的规则(标识符)
     * 该方法 返回值 必须是void
     * 方法名字建议 和要测试的接口方法一致(规范)
     */
    @Test
    public void getEmpObj() {
//    调用相关方法 查看预期结果
        Employee employee = employeeController.getEmpObj();
        System.out.println(employee);
    }


}

获取员工信息(启动)

  • 工程|模块的启动
    在这里插入图片描述

访问接口:去控制层定义的路由地址 进行访问

当前功能的访问地址:localhost:8080/emp

在这里插入图片描述

访问结果

image-20230912113341253

推荐安装插件PTG 插件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1003328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 element plus表格导出为excel自定义表头

新建一个out_excel.js文件并调用 import * as XLSX from "xlsx";export const exportToExcel (tableData, tableName, sheetName, fileName) > {const ws XLSX.utils.aoa_to_sheet([...[tableName], ...tableData]); // tableName为表头,tableData为…

【python自动化】Playwright基础教程定位操作

上文我们已经能够成功进行登录操作了。对于里面的一些定位方式,输入,点击等操作,在这一节,我们直接进行一个大汇总。以后遇到直接来这里搜。 定位操作 定位操作都在Page类下。养成看源码的习惯,结合官方文档&#xf…

这场科技巨变,有生之年有希望

见到一文,遂分享欲爆棚,总结如下。 具有人类水平的人工智能大约什么时候可以出现? 人类水平的人工智能,指的是,不需要借助人类,机器能够比人类更好地完成每项任务。 针对这个问题,有家机构在201…

Redis高效、安全的不停机数据迁移方案

Redis是目前最流行的键值对存储数据库,凭借高性能和丰富的数据类型的特性,不仅可以作为缓存,还可以作为一个可持久化的数据库存储。随着业务的发展和版本的迭代,必然会遇到内存不足、集群节点不够和BUG等一系列问题。为了防止这些…

四川百幕晟科技有限公司:抖音名称最多多少字?

在抖音上,用户可以为其帐户选择昵称,该昵称显示在用户的个人资料中。不过,很多人好奇,一个抖音昵称到底能有多少个字?本文将深入探讨抖音昵称长度限制以及一些最吸引人的昵称示例。 1、抖音昵称长度限制 抖音昵称的长度…

经典逝去,三方确认:iPhone15系列取消静音拨片,改用Action按钮

苹果公司将在9月13日凌晨1点举办秋季特别活动,这次活动将推出许多新产品,其中之一备受关注的是iPhone 15系列。在数月前,关于iPhone 15系列机型的消息早已传出,而最值得一提的变化就是取消自2007年初代iPhone发布以来一直存在的静…

【大数据环境安装】虚拟机安装操作

虚拟机安装操作 创建虚拟机 添加linux的iso镜像文件 开启虚拟机, 进行安装 正在校验, 可直接选择esc退出, 或者等待一会也是OK的 直到出现以下界面,开始选择语言: 结束后 , 点击重启, 然后进入系统, 到此, 虚拟机搭建工作结束 登录, 进入系统

【YOLOv 剪枝 轻量化】融合YOLOv5s与通道剪枝算法的奶牛轻量化个体识别方法(英文版含中文翻译)

融合YOLOv5s与通道剪枝算法的奶牛轻量化个体识别方法 Light-weight recognition network for dairy cows based on the fusion of YOLOv5s and channel pruning algorithm 论文链接知网链接 DOI链接 引用格式: 许兴时,王云飞,华志新&#xf…

全球汽车安全气囊芯片总体规模分析

安全气囊系统是一种被动安全性的保护系统,它与座椅安全带配合使用,可以为乘员提供有效的防撞保护。在汽车相撞时,汽车安全气囊可使头部受伤率减少25%,面部受伤率减少80%左右。 汽车安全气囊芯片是整个系统的控制核心,并…

中秋节包装礼盒样机|素材帮帮站

今天小编来给大家发福利了。中秋节临近,对中秋节礼盒样机愁眉苦展的宝子们看过来。 我们为您精心准备了各种款式、各种风格的中秋节包装礼盒样机素材54款【PSD源文件】,让您轻松打造独一无二的中秋礼盒。 部分效果图如下: 还有更多的素材等…

负载均衡-ribbon源码解析

负载均衡-ribbon源码解析 1 LoadBalanced注解 /*** 基于ribbon调用服务及负载均衡* return*/ LoadBalanced Bean public RestTemplate restTemplate(){return new RestTemplate(); }Bean ConditionalOnMissingBean public RestTemplateCustomizer restTemplateCustomizer(fin…

利用尾部网红的力量:跨境卖家的海外市场营销秘诀

随着互联网的不断发展,海外跨境电商已经成为全球贸易的重要一环。与此同时,社交媒体的兴起也催生了大批的海外网红,他们的粉丝群体庞大,有着巨大的市场潜力。然而,大部分跨境卖家都会集中在热门网红身上,而…

冠达管理:多场学术会议重启 医药板块行情回暖

9月11日,A股医药板块全天强势领涨,主力资金净流入超越50亿元,申万医药生物指数收涨2.62%。细分赛道中,中药、制药、立异药、瘦身药等板块领涨。个股方面,常山药业、金凯生科、通化金马、灵康药业等个股涨超10%。 音讯…

【月度刷题计划同款】从区间 DP 到卡特兰数

题目描述 这是 LeetCode 上的 「96. 不同的二叉搜索树」 ,难度为 「中等」。 Tag : 「树」、「二叉搜索树」、「动态规划」、「区间 DP」、「数学」、「卡特兰数」 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种…

Windows11系统下配置JAVA环境变量

一、环境变量的配置 1、右键开始菜单按钮,点击【系统➡高级系统设置】 2、在弹出的系统属性界面点击环境变量 3、在弹出的“环境变量”框,中选择下方的系统变量,点击新建 4、在弹出的“新建系统变量”框中,输入变量名和变量值&am…

vue中v-model应用于表单元素

v-model应用于表单元素 常见的表单元素都可以用v-model绑定关联→快速获取或设置 表单元素的值它会根据控件类型自动选取正确的方法来更新元素 常见的表单元素&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&…

RHCSA-VM-Linux安装虚拟机后的基础命令

1.代码命令 1.查看本机IP地址&#xff1a; ip addr 或者 ip a [foxbogon ~]$ ip addre [foxbogon ~]$ ip a 1&#xff1a;<Loopback,U,LOWER-UP> 为环回2网卡 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP>为虚拟机自身网卡 2.测试网络联通性&#xff1a; [f…

032:vue中三元运算, style、class、type、 event等多种场景示例

第032个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

包装类和认识泛型

目录 一、包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱 1.3 自动装箱和自动拆箱 二、泛型概念及引出 2.1 泛型概念 2.2 泛型引出 三、泛型类的使用 四、裸类型&#xff08;了解&#xff09; 五、泛型如何编译 5.1 擦除机制 5.2 为什么不能实例化泛型类型的数组 …

windows拷贝文件到WSL最快速的方法

windows拷贝文件到WSL最快速的方法 在WSL用 sudo ls /mnt/* 列出系统所有的挂载盘&#xff0c;可以看到windows系统的所有盘都列出来了 找到你需要拷贝的文件位置&#xff0c;然后使用 cp命令就可以了。例如我要拷贝h盘下面的gitlab备份文件去wsl&#xff0c;用下面的命令即可…