SpringBoot學習筆記

来源:http://www.cnblogs.com/tianwen1993/archive/2017/09/12/7512609.html
-Advertisement-
Play Games

這次的學習以一個簡單的Student Demo為示例。 1、代碼: 主程式類DemoApplication.java。 1 package com.julion.demo; 2 3 import org.springframework.boot.SpringApplication; 4 import ...


這次的學習以一個簡單的Student Demo為示例。

1、代碼:

主程式類DemoApplication.java。

 1 package com.julion.demo;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 
 6 @SpringBootApplication
 7 public class DemoApplication {
 8 
 9     public static void main(String[] args) {
10 
11         SpringApplication.run(DemoApplication.class, args);
12 
13     }
14 }
View Code

 

實體類Student.java。

 1 package com.julion.demo.domain;
 2 
 3 import javax.persistence.Entity;
 4 import javax.persistence.GeneratedValue;
 5 import javax.persistence.Id;
 6 import javax.validation.constraints.Min;
 7 
 8 @Entity
 9 public class Student {
10 
11     @Id
12     @GeneratedValue
13     private int id;
14 
15     @Min(value = 10, message = "未滿10歲不來塞")
16     private int age;
17 
18     private String name;
19 
20     public Student(){
21 
22     }
23 
24     public int getId() {
25         return id;
26     }
27 
28     public void setId(int id) {
29         this.id = id;
30     }
31 
32     public int getAge() {
33         return age;
34     }
35 
36     public void setAge(int age) {
37         this.age = age;
38     }
39 
40     public String getName() {
41         return name;
42     }
43 
44     public void setName(String name) {
45         this.name = name;
46     }
47 }
View Code

 

結果類Result.java。

 1 package com.julion.demo.domain;
 2 
 3 public class Result<T> {
 4 
 5     private int code;
 6 
 7     private String message;
 8 
 9     private T data;
10 
11     public int getCode() {
12         return code;
13     }
14 
15     public void setCode(int code) {
16         this.code = code;
17     }
18 
19     public String getMessage() {
20         return message;
21     }
22 
23     public void setMessage(String message) {
24         this.message = message;
25     }
26 
27     public T getData() {
28         return data;
29     }
30 
31     public void setData(T data) {
32         this.data = data;
33     }
34 }
View Code

 

數據相關類StudentRepository.java。

 1 package com.julion.demo.repository;
 2 
 3 import com.julion.demo.domain.Student;
 4 import org.springframework.data.jpa.repository.JpaRepository;
 5 
 6 import java.util.List;
 7 
 8 public interface StudentRepository extends JpaRepository<Student, Integer> {
 9 
10     public List<Student> findByAge(int age);
11 
12 }
View Code

 

控制類StudentController.java。

 1 package com.julion.demo.controller;
 2 
 3 import com.julion.demo.domain.Result;
 4 import com.julion.demo.domain.Student;
 5 import com.julion.demo.repository.StudentRepository;
 6 import com.julion.demo.util.ResultUtil;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.validation.BindingResult;
 9 import org.springframework.web.bind.annotation.*;
10 
11 import javax.validation.Valid;
12 import java.util.List;
13 
14 @RestController
15 public class StudentController {
16 
17     @Autowired
18     private StudentRepository studentRepository;
19 
20     @GetMapping(value = "/student")
21     public List<Student> getList(){
22         return studentRepository.findAll();
23     }
24 
25     @PostMapping(value = "/student")
26     public Result<Student> insert(@Valid Student student, BindingResult bindingResult){
27         if (bindingResult.hasErrors()){
28             return ResultUtil.error(1, bindingResult.getFieldError().getDefaultMessage());
29         }
30 
31         return ResultUtil.success(studentRepository.save(student));
32     }
33 
34     @GetMapping(value = "/student/{id}")
35     public Student getOne(@PathVariable("id") int id){
36         return studentRepository.findOne(id);
37     }
38 
39     @PutMapping(value = "/student/{id}")
40     public Student updateOne(@PathVariable("id") int id,
41                              @RequestParam("age") int age,
42                              @RequestParam("name") String name){
43         Student student = new Student();
44         student.setName(name);
45         student.setId(id);
46         student.setAge(age);
47 
48         return studentRepository.save(student);
49     }
50 
51     @DeleteMapping(value = "/student/{id}")
52     public void deleteOne(@PathVariable("id") int id){
53         studentRepository.delete(id);
54     }
55 
56     @GetMapping(value = "student/age/{age}")
57     public List<Student> getOneByAge(@PathVariable("age") int age){
58         return studentRepository.findByAge(age);
59     }
60 
61 }
View Code

 

AOP相關類HttpAspect.java。

 1 package com.julion.demo.aspect;
 2 
 3 
 4 import com.julion.demo.domain.Student;
 5 import org.aspectj.lang.JoinPoint;
 6 import org.aspectj.lang.annotation.*;
 7 import org.slf4j.Logger;
 8 import org.slf4j.LoggerFactory;
 9 import org.springframework.stereotype.Component;
10 import org.springframework.web.context.request.RequestContextHolder;
11 import org.springframework.web.context.request.ServletRequestAttributes;
12 
13 import javax.servlet.http.HttpServletRequest;
14 
15 @Aspect
16 @Component
17 public class HttpAspect {
18 
19     private static final Logger logger = LoggerFactory.getLogger(HttpAspect.class);
20 
21     @Pointcut("execution(public * com.julion.demo.controller.StudentController.*(..))")
22     public void log(){
23     }
24 
25     @Before("log()")
26     public void doBefore(JoinPoint joinPoint){
27         logger.info("i am before");
28         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
29         HttpServletRequest request = attributes.getRequest();
30 
31         //url
32         logger.info("url={}", request.getRequestURL());
33 
34         //method
35         logger.info("method={}", request.getMethod());
36 
37         //ip
38         logger.info("ip={}",request.getRemoteAddr());
39 
40         //類方法
41         logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
42 
43         //參數
44         logger.info("args={}", joinPoint.getArgs());
45     }
46 
47     @After("log()")
48     public void doAfter(){
49         logger.info("i am after");
50     }
51 
52     @AfterReturning(returning = "object", pointcut = "log()")
53     public void doAfterReturning(Object object){
54         logger.info("response={}", object.toString());
55     }
56 
57 }
View Code

 

結果工具類ResultUtil.java。

 1 package com.julion.demo.util;
 2 
 3 import com.julion.demo.domain.Result;
 4 
 5 public class ResultUtil {
 6 
 7     public static Result success(Object object){
 8         Result result = new Result();
 9         result.setCode(0);
10         result.setMessage("成功");
11         result.setData(object);
12         return result;
13     }
14 
15     public static Result success(){
16         return success(null);
17     }
18 
19     public static Result error(int code, String message){
20         Result result = new Result();
21         result.setCode(code);
22         result.setMessage(message);
23         result.setData(null);
24         return result;
25     }
26 
27 }
View Code

 

配置文件application.properties。

server.port=8081
server.context-path=/demo

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dbdemo
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
View Code

 

2、關於註解:

1) @Entity:註明是實體類。

2) @Aspect:註明是切麵。

    @PointCut:標註controller的切點。

    @Before:在controller切點前進行。

    @After:在controller切點後進行。

    @AfterReturning:在controller返回後進行。

3) @RestController:註明是controller。與@Controller和@ResponseBody同時註解的功能相當。

    @Autowired:註入。

    @GetMapping:註明是Get方法。用以查詢。

    @PostMapping:註明是Post方法。用以增加。

    @PutMapping:註明是Put方法。用以更新。

    @DeleteMapping:註明是Delete方法。用以刪除。

    @RequestMapping:註明是請求。

    @PathVairable:用以獲取形如/xxx/value格式中的value。

    @RequestParam:用以獲取形如?key=value中的value。

4) @Service:註明是Service。

    @Component:註明是Component。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • java後端1年經驗和技術總結(1) 1.引言 畢業已經一年有餘,這一年裡特別感謝技術管理人員的器重,以及同事的幫忙,學到了不少東西。這一年裡走過一些彎路,也碰到一些難題,也受到過做為一名開發卻經常為系統維護和發佈當救火隊員的苦惱。遂決定梳理一下自己所學的東西,為大家分享一下。 經過一年意識到以前也 ...
  • 原文地址: "https://rtyan.github.io/%E5%B7%A5%E5%85%B7/2017/09/12/ssh keys manager.html" 引言 我有兩個github賬戶,一個是平時正常使用的,另外一個是用來專門做博客用的, 因為之前常用的那個做博客名字不好看o(╯□╰) ...
  • 四個fetch mysqli_fetch_row(mysqli_query($sql)) 返回【第一行/下一行】匹配記錄。返回的是索引數組,如:Array(['name'] = '老王', ['age'] = 30) ...
  • 一、主題: 面向對象 二、目的: 歸納總結,將之前筆記轉化為自己能夠記住並理解的東西 三、大綱 1、概述 2、詳述 四、內容: 概述 面向對象在很多語言中都會涉及,各種百科給出的答案也是十分詳細,但站在當前學習的初級階段,在此概述時,僅涉及面向對象三大基本特性的內容,即:封裝、繼承、多態。 封裝就是 ...
  • 1、hibernate5 配置JAR包如下: antlr-2.7.7 c3p0-0.9.5.2 classmate-1.3.0 dom4j-1.6.1 hibernate-c3p0-5.2.10.Final hibernate-commons-annotations-5.0.1.Final hibe ...
  • 不知道朋友在哪裡看到的問題,qq來問我,題目是:在不修改主方法的前提下使用一個方法交換兩個int的值,方法如下: swap可以隨意修改,但是主方法不能動。 看題目想也沒想直接寫了一個方法,寫完運行結果還是沒變,代碼如下: 1 public static void swap(int a,int b){ ...
  • 學習一門開發語言首先當然是要熟悉它的語法了,Python的語法還算是比較簡單的,這裡從基礎的開始瞭解一下。 標識符1.第一個字元必須是字母表中字母或下劃線’_’。2.標識符的其他的部分有字母、數字和下劃線組成。3.標識符對大小寫敏感。 保留字保留字就是關鍵字,不能用它們做任何標識符。Python里通 ...
  • Python開發環境配置好了,但發現自帶的代碼編輯器貌似用著有點不大習慣啊,所以咱們就找一個“好用的”代碼編輯器吧,網上搜了一下資料,Python常用的編輯器有如下一些: 1. Sublime Text2. Vim3. PyScripter4. PyCharm5. Eclipse with PyDe ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...