java为什么要分为service层,dao层,controller层和Entity层等?

在Java中,通常将一个应用程序分为控制层(Controller)、服务层(Service)、实体Entity层和数据访问层(DAO)。这种分层结构的主要目的在于实现应用程序的模块化和解耦,便于团队协作和维护。

1.数据访问层(DAO):持久层,主要与数据库交互

DAO层首先会创建Dao接口,接着就可以在配置文件中定义该接口的实现类;接着就可以在模块中调用Dao的接口进行数据业务的处理,而不用关注此接口的具体实现类是哪一个类,它通过数据库驱动程序和JDBC连接到数据库,并编写SQL语句执行数据的读取和写入操作。Dao层的数据源和数据库连接的参数都是在配置文件中进行配置的。

举例:

package com.tigerhhzz.springcloud.dao;

import com.tigerhhzz.springcloud.entities.Payment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper // 是ibatis下面的注解 //@Repositoty有时候会有问题
public interface PaymentDao {
    
    
  
  public int create(Payment payment);

  public Payment getPaymentById(@Param("id") Long id);

  /**
   * 查询指定行数据
   *
   * @param offset 查询起始位置
   * @param limit  查询条数
   * @return 对象列表
   */
  List<Payment> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);
}

2.Entity层:实体层,数据库在项目中的类

主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。

举例:

package com.tigerhhzz.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//返回给前端的通用json数据串
@Data   //set/get方法
@AllArgsConstructor //有参构造器
@NoArgsConstructor  //无参构造器
public class CommonResult<T> {
    
    
  private Integer code;
  private String message;
  private T data; //泛型,对应类型的json数据

  //自定义两个参数的构造方法
  public CommonResult(Integer code, String message){
    
    
      this(code, message, null);
  }
}

3.服务层(Service):业务层 控制业务

业务模块的逻辑应用设计,和DAO层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用接口进行业务逻辑应用的处理。

业务逻辑的处理,通常包括预处理、处理、后处理等几个阶段。服务层负责将来自控制层的请求参数传递给数据访问层,并对数据进行处理。服务层还可以处理事务和调用外部接口进行计算和数据处理。

好处:封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。

举例:

package com.tigerhhzz.springcloud.service;


/**
 * @author tigerhhzz
 * @date 2022/6/15 9:16
 */
public interface PaymentService {
    
    
    String getPaymentInfo_OK(Integer id);

    String getPaymentInfo_Error(Integer id);


}

4.控制层(Controller):控制层 控制业务逻辑

具体的业务模块流程的控制,controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行。

主要负责处理用户请求和响应。它接受来自前端的请求,并根据请求中的参数执行相应的服务层方法。控制层还可以处理异常信息和返回结果,一般会将结果返回给客户端。

举例:

package com.tigerhhzz.springcloud.controller;


import com.tigerhhzz.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author tigerhhzz
 * @date 2022/6/15 9:19
 */
@RestController
@Slf4j
public class PaymentController {
    
    

    @Resource
    private PaymentService paymentService;

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/hystrix/ok/{id}")
    public String getPaymentInfo_OK(@PathVariable("id") Integer id){
    
    
        String res = paymentService.getPaymentInfo_OK(id);
        return res;
    }
    @GetMapping("/payment/hystrix/error/{id}")
    public String getPaymentInfo_Error(@PathVariable("id") Integer id){
    
    
        String res = paymentService.getPaymentInfo_Error(id);
        return res;
    }


}

通过这种分层结构,可以使应用程序的不同层次之间的关注点分离开来。控制层负责处理请求和响应,服务层负责业务逻辑的处理,而数据访问层负责与数据库的交互。这种分层结构有助于团队协作、降低开发难度、提高代码复用性和维护性。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43025151/article/details/130135108