Controller/Service/DAO简介
Controller是管理业务(Service)调度和管理跳转的。
Service是管理具体的功能的。
Controller只负责管理,而Service负责实施。
DAO只完成增删改查,虽然可以1-n,n-n,1-1关联,模糊、动态、子查询都可以。但是无论多么复杂的查询,dao只是封装增删改查。至于增删改查如何去实现一个功能,dao是不管的。
依据Controller+Service +Dao分层对前面我们构建的springboot项目进行适当优化
分层设计可以使得代码更规范,软件更有层次感,不同层负责不同功能,以免所有代码都写在一个类里面,一坨一坨的,眉毛胡子一把抓的感觉,项目一旦复杂起来代码根本没办法看,难以维护。你也可以把所有代码都写在UserController里,但是跟人协作开发,或者别人维护你的代码的时候会被喷死。
改造前的调用图
1.mapper目录改成dao
2.mapper目录下的UserMapper.xml改成UserDao.xml
3.增加service目录
4.新增UserService.java文件,新增代码如下
package com.caomingyu.cctestplatform.service;
import com.caomingyu.cctestplatform.bean.User;
import java.util.List;
public interface UserService {
List<User> queryUserList();
}
5.在service目录下新建impl目录
6.在impl目录,新建UserServiceImpl.java,实现UserService接口,之前是在UserController直接调用dao层,现在把dao层调用放到service层,controller改成调用service层,改造之后的UserController.java以及UserServiceImpl.java代码如下
UserServiceImpl.java
package com.caomingyu.cctestplatform.service.impl;
import com.caomingyu.cctestplatform.bean.User;
import com.caomingyu.cctestplatform.dao.UserDao;
import com.caomingyu.cctestplatform.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> queryUserList() {
return userDao.queryUserList();
}
}
UserController.java
package com.caomingyu.cctestplatform.controller;
import com.caomingyu.cctestplatform.bean.User;
import com.caomingyu.cctestplatform.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/queryUser")
@ResponseBody
public List<User> queryUser(){
List<User> userList = userService.queryUserList();
return userList;
}
}
至此,项目改造完毕,改造之后的调用流程如下
改造之后的代码结构图如下
我们重新启动项目,访问测试接口
http://localhost:8081/queryUser,仍然成功访问