SpringBoot三层架构

目录

一、传统方式

二、三层架构

三、代码拆分

1、dao层

2、service层

3、control层

四、运行结果


一、传统方式

上述代码存在一定的弊端,在进行软件设计和软件开发中提倡单一责任原则,使代码的可读性更强,复杂性更低,可扩展性更好,更好的进行维护。所以也就有了三层架构的概念。

二、三层架构

controler:控制层,接收前端发送的请求,对请求进行处理,并响应数据。

service:业务逻辑层,处理具体的业务逻辑。

dao:数据访问层(data access Object(持久层)),是负责数据访问操作,包括增、删、改、查。

三、代码拆分

1、dao层

首先在dao包下创建一个接口,这个接口名为EmpDao。(接口不能被实例化,只能被类实现。实现接口必须实现接口中的所有方法,除非该类本身是抽象类。方法不能包含方法体,接口中的方法隐式的被声明为共有抽象方法,即默认具有public abstract修饰符)

复制代码
public interface EmpDao {
//    获取员工数据
    public List<Emp> listEmp();
}

然后在dao包下创建imp包,再创建接口的实现类EmpDaoA。

复制代码
public class EmpDapA implements EmpDao {
    @Override
    public List<Emp> listEmp() {
        //1. 加载并解析emp.xml
        String file = "src/main/resources/emp.xml";
        System.out.println(file);
        List<Emp> empList = XmlParserUtils.parse(file, Emp.class);

        return empList;
    }
}

为什么要创建接口,然后过实现类实现,而不是直接创建类去实现?为了提高代码的可维护性、扩展性和复用性,解耦,我进行数据访问的方式时不一样,为了代码更加的灵活,所以使用的接口。

2、service层

EmpService.java

复制代码
public interface EmpService {
//    获取员工列表
    public List<Emp> listEmp();
}

EmpServiceA.java

复制代码
public class EmpServiceA implements EmpService {
    private EmpDao empDao=new EmpDapA();
    @Override
    public List<Emp> listEmp() {
        //1. 调用dao,获取数据
        List<Emp> empList = empDao.listEmp();
        //2. 对数据进行转换处理 - gender, job
        empList.stream().forEach(emp -> {
            //处理 gender 1: 男, 2: 女
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            }else if("2".equals(gender)){
                emp.setGender("女");
            }

            //处理job - 1: 讲师, 2: 班主任 , 3: 就业指导
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            }else if("2".equals(job)){
                emp.setJob("班主任");
            }else if("3".equals(job)){
                emp.setJob("就业指导");
            }
        });
        return empList;
    }
}

service层是处理具体的业务逻辑。它处理的数据是从dao层获取的,所有在EmpServiceA类中需要定义一个EmpDao对象用来获取处理数据。在EmpServiceA类中的方法中通过EmpDao实例对象方法获取数据。

3、control层

EmpController.java

复制代码
@RestController
public class EmpController {
    private EmpService empService=new EmpServiceA();
    @RequestMapping("/listEmp")
    public Result list(){
//       调用service,获取数据
        List<Emp> empList = empService.listEmp();
        //3. 响应数据
        return Result.success(empList);
    }
}

@RestController`是Spring框架中的一个注解,用于标记一个类作为RESTful Web服务的控制器。它结合了@Controller和@ResponseBody两个注解的功能,使得该类中的方法可以直接返回JSON或XML等格式的数据,而无需手动添加@ResponseBody注解。

四、运行结果

如果程序没有出错会有如下结果

相关推荐
程序员爱钓鱼18 分钟前
限流、控并发、减GC!一文搞懂Go项目资源优化的正确姿势
后端·google·go
一只小青团3 小时前
Python之面向对象和类
java·开发语言
好奇的菜鸟3 小时前
Spring Boot 事务失效问题:同一个 Service 类中方法调用导致事务失效的原因及解决方案
数据库·spring boot·sql
qq_529835353 小时前
ThreadLocal内存泄漏 强引用vs弱引用
java·开发语言·jvm
落笔画忧愁e3 小时前
扣子Coze飞书多维表插件添加数据记录
java·服务器·飞书
来自宇宙的曹先生4 小时前
视频网站弹幕系统简易实现
spring boot·音视频
姑苏洛言5 小时前
编写产品需求文档:黄历日历小程序
前端·javascript·后端
秋千码途6 小时前
小架构step系列08:logback.xml的配置
xml·java·logback
飞翔的佩奇6 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
姑苏洛言6 小时前
搭建一款结合传统黄历功能的日历小程序
前端·javascript·后端