TmallSpringBoot實戰學習筆記

Tmall_SpringBoot項目練習

POJO

​ POJO是一個簡單的、普通Java對象,它包含業務邏輯處理或持久化邏輯等,但不是JavaBean、EntityBean等,不具備任何特殊角色,不繼承或不實現任何其它Java框架的類或接口。能夠包含相似與JavaBean屬性和對屬性訪問的setter和getter方法的。html

基本意思是說POJO一個普通的Java對象(不是JavaBean,EntityBean等),也不擔當任何的特殊的角色,也不實現任何Java框架指定的接口。java

錯誤的POJOmysql

public class DbHello implements Hello { 
    //實現了接口,就不能稱之爲POJO,這已經不是簡單的Java類了
     private DictionaryDAO dao;

     public void setDao(DictionaryDAO dao) {
            this.dao = dao;
     }
}

正確的POJOgit

public class DbHello { 
        //簡單的Java類,稱之爲POJO,不繼承,不實現接口
     private DictionaryDAO dao;
     public void setDao(DictionaryDAO dao) {
            this.dao = dao;
     }

}

JPA之@GeneratedValue註解

​ 在JPA中,@GeneratedValue註解存在的意義主要就是爲一個實體生成一個惟一標識的主鍵(JPA要求每個實體Entity,必須有且只有一個主鍵)web

@GeneratedValue提供了主鍵的生成策略。@GeneratedValue註解有兩個屬性,分別是strategygenerator,其中generator屬性的值是一個字符串,默認爲"",其聲明瞭主鍵生成器的名稱(對應於同名的主鍵生成器@SequenceGenerator和@TableGenerator)。spring

JPA爲開發人員提供了四種主鍵生成策略,其被定義在枚舉類GenerationType中,包括GenerationType.TABLEsql

GenerationType.SEQUENCE數據庫

GenerationType.IDENTITYjson

GenerationType.AUTOapi

–IDENTITY:採用數據庫ID自增加的方式來自增主鍵字段,Oracle 不支持這種方式;
–AUTO: JPA自動選擇合適的策略,是默認選項;
–SEQUENCE:經過序列產生主鍵,經過@SequenceGenerator 註解指定序列名,MySql不支持這種方式
–TABLE:經過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可使應用更易於數據庫移植。

實例

@Entity //jpa標註實體
@Table(name = "t_customer") // 建立/修改表的名稱
@Data
public class Customer {

    @Id // 主鍵
    //@GeneratedValue(strategy = GenerationType.AUTO)
    //主鍵自增 Auto爲默認使用oracle自增的方式 
    //因此在運行時會多生成一張表 記錄從1開始 記錄主鍵
    //這裏不適用與mysql 可是使用
    //@GeneratedValue(strategy = GenerationType.IDENTITY)報主鍵不能爲空錯誤
    private Long id;

    @Column(name = "name", nullable = true) 
    // 數據庫對應字段名 非空約束(能夠爲空)
    private String name;

    @Column(name = "remark", nullable = true)
    // 數據庫對應字段名 非空約束(能夠爲空)
    private String remark;
    
    ......

}

RESULTFul

阮一峯博客連接

url重定向和轉發

​ Web UI項目中, 不少 Spring controller 視圖函數直接返回 html 頁面, 還有一些視圖函數是要重定向或轉發到其餘的 url 上.

redirect 和 forward的區別:

重定向 redirect: 完整的重定向包含兩次request-response過程,

第一次是訪問原始url

第二次是服務器通知客戶端訪問重定向後的url. 重定向完成後, 瀏覽器的地址是重定向後的url, 而不是原始的url

重定向的使用場景: 由於重定向會修改瀏覽器地址, 因此 form 提交應該使用重定向, 以避免用戶刷新頁面致使form重複提交.

轉發 forward: 完整的轉發僅包含一次 request-response 過程, 用戶發出request後, 服務器端視圖函數先處理本身的邏輯, 而後在服務器端有調用另外一個視圖函數, 最後將response返回給瀏覽器.

harrychinese 劉忠武_博客園引用

調用順序

控制層調用service層

service調用dao層

dao調用具體的增刪改查

經常使用註解

@PathVaribale

​ 獲取url中的數據

若是咱們須要獲取Url=localhost:8080/hello/id中的id值,實現代碼以下:
@RestController
public class HelloController {
    @RequestMapping(value="/hello/{id}",method= RequestMethod.GET)
    public String sayHello(
                        @PathVariable("id") Integer id){
        return "id:"+id;
    }
}


一樣,若是咱們須要在url有多個參數須要獲取,則以下代碼所示來作就能夠了。
@RestController
public class HelloController {
    @RequestMapping(value="/hello/{id}/{name}",method=RequestMethod.GET)
    public String sayHello(
                        @PathVariable("id") Integer id,
                        @PathVariable("name") String name){
        return "id:"+id+" name:"+name;
    }
}

@RequestParam

​ 獲取請求參數的值

獲取Url=localhost:8080/hello?id=98中id的值
@RestController
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(@RequestParam("id") Integer id){
        return "id:"+id;
    }
}


@RequestParam註解給咱們提供了這種解決方案,即容許用戶不輸入id時,使用默認值

@RestController
public class HelloController {
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    //required=false 表示url中能夠不穿入id參數,此時就使用默認參數
    public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){
        return "id:"+id;
    }
}

@GetMapping

@GetMapping是一個組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫。該註解將HTTP Get 映射到 特定的處理方法上。

便可以使用@GetMapping(value = 「/hello」)來代替@RequestMapping(value=」/hello」,method= RequestMethod.GET)。便可以讓咱們精簡代碼。

HelloWorld_EE_csdn

@RestController

@RestController Spring框架4版本以後出來的註解,以前版本返回json數據須要@ResponseBody配合@Controller

@RestController
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello";
    }
}

等同於下面
@Controller
@ResponseBody
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello";
    }
}

HelloWorld_EE

添加支持CORS跨域訪問

CORS(Cross-Origin Resource Sharing)"跨域資源共享",是一個W3C標準,它容許瀏覽器向跨域服務器發送Ajax請求,打破了Ajax只能訪問本站內的資源限制

addMapping:配置能夠被跨域的路徑,能夠任意配置,能夠具體到直接請求路徑。
allowedMethods:容許全部的請求方法訪問該跨域資源服務器,如:POST、GET、PUT、DELETE等。
allowedOrigins:容許全部的請求域名訪問咱們的跨域資源,能夠固定單條或者多條內容,如:"http://www.baidu.com",只有百度能夠訪問咱們的跨域資源。
allowedHeaders:容許全部的請求header訪問,能夠自定義設置任意請求頭信息,如:"X-YAUTH-TOKEN"

恆宇少年——簡書

統一異常處理ControllerAdvice

在用spring Bootweb後臺時,常常會出現異常,若是每一個異常都本身去處理很麻煩,因此咱們建立一個全局異常處理類來統一處理異常。經過使用@ControllerAdvice定義統一的異常處理類,而不是在每一個Controller中逐個定義。

自定義全局異常處理類 GlobalExceptionHandler.java

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MyException.class)

    @ResponseBody
    public Result handleMyException(HttpServletRequest request, MyException e){
        String message = e.getMessage();
        Integer code = e.getCode();
        Result result = new Result(code,message);
        return result;
    }
}

只須要使用 @ControllerAdvice 註解來標識便可,能夠結合 @Controller 註解來理解.

@Controller 註解標識的類 攔截全部的web請求,使用 @RequestMappering() 進行匹配

@ControllerAdvice 註解標識的類 攔截程序拋出的異常,使用@ExceptionHandler() 進行匹配

趙彥軍

PostTruth

SpringBoot添加webapp目錄

fakerswe——csdn

持續更新中

相關文章
相關標籤/搜索