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;
    }


}

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

在这里插入图片描述

  • 2
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中,servicedao和mapper是常用的三架构设计模式中的关键组成部分。 service是业务逻辑,负责处理具体的业务操作。它可以理解为对一个或者多个dao进行再次封装,将多个数据操作组合在一起,提供操作数据库的方法。通常,我们首先需要设计接口,定义service的功能和方法,然后在实现类中实现这些方法。在service中,我们可以调用dao的接口方法,通过接口方法与数据库进行交互,完成复杂的业务逻辑。 dao是数据访问对象,相当于数据库访问。它直接与数据库打交道,执行SQL语句,负责数据的增删改查操作。dao的主要作用是将数据库操作封装成接口,提供给service调用。在dao中,我们可以使用数据库访问框架(如MyBatis)来简化数据库操作,通过接口方法来执行SQL语句,并返回结果给service。 mapperdao的具体实现,负责实现dao接口中定义的方法。mapper中定义了与数据库交互的具体SQL语句,用于实现数据的增删改查操作。在mapper中,我们可以使用注解或者XML来编写SQL语句,通过与数据库交互来完成具体的数据操作。 综上所述,service负责业务逻辑的处理,dao负责与数据库的交互,而mapperdao的具体实现。通过这样的分设计,可以使代码结构清晰,便于维护和扩展。可以通过定义接口和实现类来实现servicedao的功能,通过SQL语句来实现mapper与数据库的交互。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [javaentitydaoservice、mapper、utilcontroller具体含义以及表现](https://blog.csdn.net/huzia/article/details/124290659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [一键生成java代码、数据库设计文档、接口对接文档(daoentity、mapper、servicecontroller)](https://download.csdn.net/download/li_xiao_ran/11005266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hhzz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值