分层的作用:
在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。
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层的设计:
- 首先是设计DAO任务的接口(增删改查),再设计其实现的类。
- 然后在Spring的配置文件中配置接口和实现类的关联。DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
- 然后就可以在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层的设计:
- 同样是首先设计接口,再设计其实现的类,实现类中要调用dao层接口。每个接口分别封装一个服务的业务处理方法。具体实现在serviceImpl中。
- 接着再Spring的配置文件中配置其实现的关联。
- 这样我们就可以在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页面的表示,