Spring Boot中的 RestController 与数据 CRUD 操作

1.Spring Boot

    Spring:    POJO容器。AOP各个层次之间的结藕
    Spring MVC:    分离模型与视图
    Spring Data:    数据存储
    Spring Security:    集成了第三方技术


2.Spring MVC

    类似的技术:struts,JSF,MVC
    解决的问题:分离模型层(M)与视图层(V)
    怎么分离:提供控制层(C)


  3.注解

    @Controller:    控制器
    @RestController:    RESTful控制器
    @ResponseBody:    响应体,返回数据(json),不是视图名
    @RequestBody:    请求体,获得Http请求头的负载(json/xml)并填充层对象
    @RequestMapping
        @GetMapping
        @PostMapping
        @PutMapping
        @DeleteMapping
    @PathVariable:    路径变量,/user/{name}/address/{id}
    路径代表资源,方法代表资源的操作。

 

4.方案

    1.RESTful API+Vue ClI(前后端分离)    ------推荐-----
    2.RESTful API+static(HTML,CSS,JS)    ------今天写的---
    3.Controller+模板引擎(JSP,JSTL,Thymeleaf)

5.工程目录
    Spring Boot中的 RestController 与数据 CRUD 操作_第1张图片


Course.java
    

package com.newer.work;
/**
 * POJO
 * @author Admin
 *
 */
public class Course {

	int id;
	String title;
	String info;
	
	public  Course() {
		
	}

	public Course(int id, String title, String info) {
		super();
		this.id = id;
		this.title = title;
		this.info = info;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

	@Override
	public String toString() {
		return "Course [id=" + id + ", title=" + title + ", info=" + info + "]";
	}
	
	
	
}

CourseController.java

package com.newer.work;

import java.util.List;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * RESTful风格API(开发接口)
 * 
 * 建议:	URL中加入/api/版本号的前缀
 * @author Admin
 *
 */
@RestController
@RequestMapping("/api/v1/course")
public class CourseController {
	
//	Get "/course"
	@GetMapping
	public List findAll() {
		return Db.selectAll();
	}
	
	@GetMapping("/{id}")
	public Course load(@PathVariable int id) {
//		Course c=new Course();
//		c.setId(id);
		return Db.selectById(id);
	}
	
	
//	接收HTTP请求Body中的JSON数据,必须使用@RequestBody注解
	@PostMapping
	public Course create(@RequestBody Course c) {
		
//		存储
//		c.setId(999);
		Course course=Db.insert(c);
//		数据库中保存的对象
		return course;
	}
	
	
//	@RequestBody从HTTP请求头中读取数据(JSON)填充一个Course类型对象
	@PutMapping("/{id}")
	public ResponseEntity update(@PathVariable int id,@RequestBody Course c) {
		
//		更新
		Db.update(id, c);
		
//		Http响应头中的状态码
//		1xx 信息中
//		2xx 成功
//		3xx 重定向
//		4xx 客户端错误
//		5xx 服务端错误
		return new ResponseEntity("Http响应主体",HttpStatus.OK);
		
	}
	
	@DeleteMapping("/{id}")
	public boolean  remove(@PathVariable int id) {
//		删除
		return Db.delete(id);
	}
}

Db.java

package com.newer.work;

import java.util.ArrayList;
import java.util.List;

/**
 * 模拟数据库
 * @author Admin
 *
 */
public class Db {
//	计数器,类变量
	static int count=1000;

//	集合,表
	static ListcourseTable=new ArrayList<>();
	
	static {
		courseTable.add(new Course(1,"vue","前端框架"));
		courseTable.add(new Course(3,"JS","前端框架"));
		courseTable.add(new Course(7,"redis","数据存储"));
		
	}
	
/**
 * 返回所有数据
 * @return
 */
	public static ListselectAll(){
		return courseTable;
	}
	
/**
 * 返回课程编号等于id的课程
 * 
 * @param id 课程编号
 * @return 匹配的课程或null
 */
	public static Course selectById(int id) {
		Course c=null;
		
		for(Course course:courseTable) {
			if(course.getId()==id) {
				c=course;
				break;
			}
		}
		 return c;
	}
	
	/**
	 * 插入一条数据
	 * 
	 * @param c 新课程
	 * @return 
	 */
	public static Course insert(Course c) {
//		数据库存储后才生成id
//		第一个值是1001
		c.setId(++count);
		courseTable.add(c);
		
		return c;
	}
	
	/**
	 * 根据id删除记录
	 * 
	 * @param id 编号
	 * @return boolean 成功删除返回true,否则返回false
	 */
	public static boolean delete(int id) {
		
		Course d=null;
//		删除不要用foreach
		for (int i = 0; i < courseTable.size(); i++) {
			Course course=courseTable.get(i);
			if(course.getId()==id) {
				courseTable.remove(i);
				break;
			}
		}
		
//		是否成功删除
		return d!=null;
	}
	
	/**
	 * 更新编号为id的数据
	 * @param id  编号
	 * @param c	  新数据
	 */
	public static void update(int id,Course c) {
//		更新不要用foreach
		for (int i = 0; i <  courseTable.size(); i++) {
			Course course=courseTable.get(i);
			if(course.getId()==id) {
//				更新
				course.setTitle(c.getTitle());
				course.setInfo(c.getInfo());
				break;
			}
		}
	}
	
	
	
}

HomeController.java

package com.newer.work;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {
	
	
//	Get "/"--->"index.html"
	@GetMapping("/")
	public String home() {
		return "index.html";
	}
	
	@GetMapping("/course")
	public String course() {
//		请求转发到"/"--->index.html
//		return "/";
//		响应重定向"/"---地址栏改变
//		状态码302.
		return "redirect:/";
	}

}

WorkApplication.java

package com.newer.work;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WorkApplication {

	public static void main(String[] args) {
		SpringApplication.run(WorkApplication.class, args);
	}

}

index.html





    Spring Boot+Vue
    
    
    

    
    
    
    

    
    




    

服务端&前端在一起

Spring Boot+ Vue+axios

编号 课程 描述 操作
{{c.id}} {{c.title}} {{c.info}}

application.properties


#显示Spring MVC 日志信息
logging.level.web=debug

#显示请求头详细信息
spring.http.log-request-details=true

测试:

Spring Boot中的 RestController 与数据 CRUD 操作_第2张图片


 

Spring Boot中的 RestController 与数据 CRUD 操作_第3张图片 


 

Spring Boot中的 RestController 与数据 CRUD 操作_第4张图片 


 

Spring Boot中的 RestController 与数据 CRUD 操作_第5张图片

你可能感兴趣的:(Spring)