解讀controller層,service層,mapper層,entity層的作用與聯(lián)系
controller層,service層,mapper層,entity層作用與聯(lián)系

1.controller層
controller層是用來(lái)接受前臺(tái)數(shù)據(jù)和返回頁(yè)面請(qǐng)求信息的,
Controller層是不允許直接操作數(shù)據(jù)庫(kù)的!它就像一個(gè)服務(wù)員,哪桌客人需要點(diǎn)菜了,就喊一聲服務(wù)員!
對(duì)應(yīng)的,外界需要完成什么樣的業(yè)務(wù),就通過(guò)Controller去調(diào)用不同的Service,需要記住的是Controller只是一個(gè)中間者或者轉(zhuǎn)發(fā)者,不應(yīng)該在Controller里暴露Service的業(yè)務(wù)邏輯,而應(yīng)該直接轉(zhuǎn)發(fā)Service的業(yè)務(wù)處理結(jié)果!
控制層,負(fù)責(zé)具體模塊的業(yè)務(wù)流程控制,需要調(diào)用service邏輯設(shè)計(jì)層的接口來(lái)控制業(yè)務(wù)流程。
controller通過(guò)接收前端H5或者App傳過(guò)來(lái)的參數(shù)進(jìn)行業(yè)務(wù)操作,再將處理結(jié)果返回到前端。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/select")
public List<User> index(){
List<User> all = userMapper.findAll();
return all;
}
@Autowired
private UserService userService;
@PostMapping("/insert")
public boolean save(@RequestBody User user){
return userService.saveUser(user);
}
@DeleteMapping("/{id}")
public Integer delete(@PathVariable Integer id){
return userMapper.deleteById(id);
}2.servie層
service層接受controller層信息,用于業(yè)務(wù)處理和邏輯判斷。Service 用于處理業(yè)務(wù)邏輯,會(huì)調(diào)用mapper層的API;
Service層是業(yè)務(wù)邏輯層,在該層進(jìn)行復(fù)雜的業(yè)務(wù)邏輯處理,對(duì)在多個(gè)mapper層查到的數(shù)據(jù)進(jìn)行組裝、處理,然后將結(jié)果返回給Controller,因此,一般情況下,一個(gè)Controller中可能包括多個(gè)Service,而一個(gè)Service中又或許包含多個(gè)mapper。
(舉例)controller層是飯店經(jīng)理,service是服務(wù)員,mapper層是廚房倉(cāng)庫(kù)。
業(yè)務(wù)service層,給controller層的類(lèi)提供接口進(jìn)行調(diào)用。一般就是自己寫(xiě)的方法封裝起來(lái),就是聲明一下,具體實(shí)現(xiàn)在serviceImpl中。
public class UserService extends ServiceImpl<UserMapper, User> {
public boolean saveUser(User user) {
if(user.getId() == null){
return save(user);//mybatis-plus提供的方法,表示插入數(shù)據(jù)。
}else{
return updateById(user);
}
}3.mapper層
mapper層(數(shù)據(jù)持久化層,專(zhuān)門(mén)用來(lái)跟數(shù)據(jù)庫(kù)打交道的)。
mapper層用于和數(shù)據(jù)庫(kù)交互,想要訪問(wèn)數(shù)據(jù)庫(kù)并且操作,只能通過(guò)mapper層向數(shù)據(jù)庫(kù)發(fā)送sql語(yǔ)句,將這些結(jié)果通過(guò)接口傳給service層,對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)持久化操作,他的方法語(yǔ)句是直接針對(duì)數(shù)據(jù)庫(kù)操作的,
主要實(shí)現(xiàn)一些增刪改查操作,在mybatis中方法主要與與xxx.xml內(nèi)相互一一映射。
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {//數(shù)據(jù)庫(kù)查詢(xún)接口,專(zhuān)門(mén)用來(lái)跟數(shù)據(jù)庫(kù)交互用的
@Select("SELECT * from sys_user")
public List<User> findAll();
List<User> findAll1();
@Insert("INSERT into sys_user(username,password,nickname,email,phone,address)VALUES(#{username},#{password},#{nickname}," +
"#{email},#{phone},#{address});")
public int insert(User user);
public int updateUser(User user);
@Delete("delete from sys_user where id = #{id}")
public Integer deleteById(@Param("id") Integer id);4.entity層
entity層創(chuàng)建實(shí)體類(lèi),和數(shù)據(jù)庫(kù)表里面屬性值一一對(duì)應(yīng)。
實(shí)體層,用于存放我們的實(shí)體類(lèi),與數(shù)據(jù)庫(kù)中的屬性值基本保持一致,實(shí)現(xiàn)set和get的方法或者使用注解的方式。
@Data//Data注解代替了get和set方法
@TableName(value = "sys_user")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
private String username;
private String password;
private String nickname;
private String email;
private String phone;
private String address;
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java集合與數(shù)組區(qū)別簡(jiǎn)介及相互轉(zhuǎn)換實(shí)例
這篇文章主要介紹了Java集合與數(shù)組區(qū)別簡(jiǎn)介及相互轉(zhuǎn)換實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
jxl 導(dǎo)出數(shù)據(jù)到excel的實(shí)例講解
下面小編就為大家分享一篇jxl 導(dǎo)出數(shù)據(jù)到excel的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
Maven和IntelliJ IDEA搭建多模塊微服務(wù)的實(shí)現(xiàn)
本文主要介紹了Maven和IntelliJ IDEA搭建多模塊微服務(wù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
Java代碼實(shí)現(xiàn)矩形覆蓋實(shí)例
這篇文章主要介紹了Java代碼實(shí)現(xiàn)矩形覆蓋實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06

