前提 :创建一个新的springboot模块
创建一个员工案例(搭建)
- 创建员工实体类
- 创建员工的控制层
- 创建员工的服务层(接口–实现类)
- 创建员工的数据层(接口–实现类)
以上的4种文件 是使用SSM必备的文件
创建员工实体类
- 属性
- get|set方法
理论上说 实体类是需要和数据库中的表格的列名一对一对应 在此处是任意命名属性 没有连接数据库
实体类代码:
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 {
}
获取员工信息(需求)
- 信息 理论来源于数据库,在此处未连接数据库 ,在持久层中模拟数据库获取数据——————持久层|数据层
- 需要将该信息的接口暴露给前端(写接口)——————控制层
- 实现接口(在业务层中实现接口)——————————服务层
推荐写功能的顺序:控制层----服务层—持久层
控制层代码
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;
}
}
获取员工信息(测试)
- 创建测试类
- 执行单元测试
测试类代码
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
访问结果