MVC框架中Entity层,DAO层,Service层,Controller层的关系和区别

分层的作用:

在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。   

MVC框架中Entity层,DAO层,Service层,Controller层的关系和区别

 

entity层(model层 = entity层 = domain层)

entity层的作用: 用于存放的实体类,与数据库中的属性值基本保持一致。实现set和get的方法。

public class User {
    /* 用户id */
    private Long id;
  
    /* 获取用户id */
    public Long getId() {
        return id;
    }

    /* 设置用户id */
    public void setId(Long id) {
        this.id = id;
    }
}

DAO层(mybatis的mapper层,数据访问层,data access object)

DAO层的作用:DAO层就是数据持久层,直接对数据库进行数据持久化操作。对某个表进行增删改查基本操作。

DAO层的设计

  1. 首先是设计DAO任务的接口(增删改查),再设计其实现的类。
  2. 然后在Spring的配置文件中配置接口和实现类的关联。DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
  3. 然后就可以在Service层中调用DAO层的接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类。                                                         
public interface userMapper {
    int deleteByPrimaryKey(Long id);

    int insert(user record);

    int insertSelective(user record);

    user selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(user record);

    int updateByPrimaryKey(user record);
}

Service层(服务层,逻辑层)

Service层的作用:对业务模块的逻辑应用设计。根据具体的业务逻辑封装Dao层的操作,对外表现为实现一种功能 / 服务。例如:网购生成订单时,不仅要插入订单信息记录,还要查询商品库存是否充足,购买是否超过限制等等。

Service层的设计

  1. 同样是首先设计接口,再设计其实现的类,实现类中要调用dao层接口。每个接口分别封装一个服务的业务处理方法。具体实现在serviceImpl中。
  2. 接着再Spring的配置文件中配置其实现的关联。
  3. 这样我们就可以在Controller层中调用Service接口来进行业务处理。                      

DAO面向表,Service面向业务。后端开发时先在数据库中设计出所有表,然后对每一张表设计出DAO层,然后根据具体的业务逻辑进一步封装DAO层成一个Service层,对外提供成一个服务。

public interface UserService extends Service<User> {

}

service的 impl 是把mapper和service进行整合的文件。

Controller层( web 层,控制器)

Controller层的作用: 控制具体模块的业务流程。负责请求转发,接受前端传过来的参数,调用Serice层来实现这个业务逻辑,得到返回值,再传给页面。

在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。      

@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;

    @PostMapping("/add")
    public Result add(User user) {
        userService.save(user);
        return ResultGenerator.genSuccessResult();
    }

    @PostMapping("/delete")
    public Result delete(@RequestParam Integer id) {
        userService.deleteById(id);
        return ResultGenerator.genSuccessResult();
    }

    @PostMapping("/update")
    public Result update(User user) {
        userService.update(user);
        return ResultGenerator.genSuccessResult();
    }

    @PostMapping("/detail")
    public Result detail(@RequestParam Integer id) {
        User user = userService.findById(id);
        return ResultGenerator.genSuccessResult(user);
    }

    @PostMapping("/list")
    public Result list(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "0") Integer size) {
        PageHelper.startPage(page, size);
        List<User> list = userService.findAll();
        PageInfo pageInfo = new PageInfo(list);
        return ResultGenerator.genSuccessResult(pageInfo);
    }
}

View层 此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示,           

 

 

 

                                                                                                                                                                                                                                                         

上一篇:spark踩坑--WARN ProcfsMetricsGetter: Exception when trying to compute pagesize的最全解法


下一篇:JS实现分页