spring boot入門與理解MVC三層架構


一、SpringMVC分層框架

分層是為了實現“高內聚,低耦合”,把問題划分開來,各個解決,易於控制,延展和分配資源,最重要有利於后期維護項目;

MVC指的是model,view,controller;

在SpringMVC編程中一般分為四層:

1.表示層:(jsp、html 主要就是界面的展示),負責前后端交互,接收前端發送的請求,然后調用service層,service層再返回數據給它,它再返回給前端。

2.控制層:(Contoller、Action)控制界面跳轉,負責前后端交互,接收前端發送的請求,然后調用service層,service層再返回數據給它,它再返回給前端。

3.業務層:(Service)寫主要的業務邏輯,調用DAO層,操作數據庫,再對返回的數據進行各種業務上的處理,再返回給控制層。實現解耦合目的,雖然不要它也可以運行項目,但是會使項目后期的延展和維護變得困難

4.持久層:(DAO)也叫數據訪問層,實現對數據庫的訪問。完成增刪改查功能,把數據返回給service層。

5.實體層:(Model)數據庫實體層,存放實體類,實現get、set方法。屬性要和數據庫的一樣。

二、注解的使用

在SpringMVC中經常用到注解,使用注解可以極大的節省開發者的時間,下面是幾個最重要的注解介紹:

@Repository:標注數據訪問層,可以告訴SpringMVC這是一個數據訪問層,並將其申明為一個bean,例如UserDao接口的實現類UserDaoImpl,在類上加注解@Repository("userDao"),bean的名稱為userDao

@Service:標注業務層,例如UserService接口的實現類,在類上加@Service("userService"),bean的名稱為userService

@Controller:控制層,在控制層類上加@Controller即可,確認其是一個控制層類

@Component:當不確定是屬於哪層是用這個注解

三、實踐代碼演示

項目結構:

 

 

(1) Model 層

存放實體類,實現get、set方法,屬性要和數據庫的一樣。

//一個model對應一張表中的字段 public class Student { private UUID id; private String name; public UUID getId() { return id; } public void setId(UUID id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Student(UUID id, String name){ this.id = id; this.name = name; } public Student(){} } 

(2)Dao層

數據訪問層,和Model層交互。實現接口,對數據庫的訪問。完成增刪改查功能

//定義操作數據庫的方法 public interface StudentDao { Optional<Student> selectStudentById(UUID id); List<Student> selectAllStudents(); int insertStudent(Student student); int upgradeStudent(Student student); int deleteStudent(UUID id); } 

定義接口的實現,因為沒有實現和數據庫直接相連,就使用假數據。

@Repository @Resource public class FakeStudentDao implements StudentDao { private static List<Student> database = new ArrayList<>(); @Override public Optional<Student> selectStudentById(UUID id) { for(Student s : database){ if(s.getId().equals(id)){ return Optional.of(s); } } return Optional.empty(); } @Override public List<Student> selectAllStudents() { return database; } @Override public int insertStudent(Student student) { UUID id = UUID.randomUUID(); database.add(new Student(id,student.getName())); return 1; } @Override public int upgradeStudent(Student student) { // 先找到這個要更新的student的信息 int indexToUpdate = -1; for(int i = 0;i<database.size();i++){ if(student.getId().equals(database.get(i).getId())){ indexToUpdate = i; break; } } if(indexToUpdate<0) return -1; database.set(indexToUpdate,student); return 1; } @Override public int deleteStudent(UUID id) { Optional<Student> optionalStudent = selectStudentById(id); if(!optionalStudent.isPresent()){ return -1; } database.remove(optionalStudent.get()); return 1; } } 

(3)Service層

主要的業務邏輯,調用DAO層,操作數據庫,再對返回的數據進行各種業務上的處理,再返回給控制層。實現解耦合目的.

@Service public class StudentService { private StudentDao studentDao; @Autowired public StudentService(StudentDao studentDao) { this.studentDao = studentDao; } public List<Student> getAllStudents(){ return studentDao.selectAllStudents(); } public int addStudent(Student student ){ return studentDao.insertStudent(student); } public int upgradeStudent(Student student ){ return studentDao.upgradeStudent(student); } public int deleteStudent(UUID id){ return studentDao.deleteStudent(id); } } 

(4) Controller層

控制界面跳轉,負責前后端交互,接收前端發送的請求,然后調用service層,service層再返回數據給它,它再返回給前端。

@RestController @RequestMapping("/springboot") public class StudentController { private StudentService studentService; @Autowired public StudentController(StudentService studentService) { this.studentService = studentService; } @GetMapping public List<Student> getAllStudents() { return studentService.getAllStudents(); } @PostMapping public String addStudent(@RequestBody Student student){ studentService.addStudent(student); return "Added student"; } @PutMapping public String upgradeStudent(@RequestBody Student student){ studentService.upgradeStudent(student); return "Upgrade student"; } @DeleteMapping(path = "{id}") // localhost:8080/springboot/123 public String deleteStudent(@PathVariable("id") UUID id){ studentService.deleteStudent(id); return "Deleted student"; } }



作者:Find_Your_Way
鏈接:https://www.jianshu.com/p/ac5cfed91e26
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM