第一個SSM完整項目開發心得

博主由於打算要考研,因此爲了給本身留一手後路。學習了SSM框架。這學期就作了一個完整的SSM項目。(若是考研失敗就去外包作一波CRUD boy)前端

因此邊考研邊利用業餘時間作了一學期,接着期末一週的Web課設時間終於把這個項目1.0搞定了。java

下面就來談一下開發完我開發完這個項目的心得:spring

本身之前作項目就是方法,類什麼的都放得比較亂,通過此次完整項目開發。瞭解了不只先後端要分離,後端也要分類別類的存放,這樣有利於後期的修改以及sql

讓人看起來神清氣爽,至少這樣作確實若是後期要修改以前的代碼會方便不少。數據庫

 

在後端:後端

 主要目錄就是這幾個服務器

首先談談Controller層:Controller是先後端對接的地方。接收前端請求,接收前端數據,app

轉換格式後框架

調用Service進行處理後,以Map<String,Object>格式返回ide

 

dto層:我理解的是存放Service的返回類型,來存儲Service從Mapper層中查詢的內容

這裏可能會有點模糊的是,爲何不直接返回pojo的實體類

緣由是:拿添加來舉例,若是添加則一定會有添加成功或者失敗的狀況。若是失敗,那麼會有一個失敗緣由

因此必須把失敗緣由返回給Controller來處理,因此就建立一個dto類來放有關Service的返回類

例如:

package com.how2java.dto;

import com.how2java.enums.OrderStateEnum;
import com.how2java.pojo.Order;

import java.util.List;

public class OrderExecution {
    //結果狀態
    private int state=0;
    //狀態標識
    private String stateInfo;
    //訂單數量
    private int count;
    //操做的Order-增查
    private List<Order> orderList;
    //添加時的Order
    private Order order;

    public Order getOrder() {
        return order;
    }

    public void setOrder(Order order) {
        this.order = order;
    }

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public String getStateInfo() {
        return stateInfo;
    }

    public void setStateInfo(String stateInfo) {
        this.stateInfo = stateInfo;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public List<Order> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    public OrderExecution() {

    }

    //店鋪操做失敗時候使用的構造器
    public OrderExecution(OrderStateEnum stateEnum) {
        this.state = stateEnum.getState();
        this.stateInfo = stateEnum.getStateInfo();

    }

    //店鋪操做成功時候使用成功的構造器
    public OrderExecution(OrderStateEnum stateEnum, Order order) {
        this.state = stateEnum.getState();
        this.stateInfo = stateEnum.getStateInfo();
        this.order = order;

    }

    //店鋪操做成功時候使用成功的構造器
    public OrderExecution(OrderStateEnum stateEnum, List<Order> orderList) {
        this.state = stateEnum.getState();
        this.stateInfo = stateEnum.getStateInfo();
        this.orderList = orderList;
    }

}
View Code

 

還能夠存放Controller的返回類  如若Controller只返回一種類型的數據  咱們能夠在dto中編寫一個

Result類同時存儲返回狀態值和返回數據

還能夠存放Controller裏面圖片處理類 用來專門封裝名稱和數據流  直接返回給Service處理

其實後兩種我認爲歸於後面的util工具類可能會更合理

 

enums層:主要存儲操做數據庫最後的狀態成功與否,和失敗緣由  來與dto的Excution層進行比對判斷失敗與否 獲取失敗緣由

package com.how2java.enums;

public enum OrderStateEnum {
    SUCCESS(1, "操做成功"),
    INNER_ERROR(-1001, "操做失敗"), EMPTY_LIST(-1002, "訂單列表爲空"),NULL_ORDER(-1003,"Order信息爲空");
    private int state;
    private String stateInfo;

    public int getState() {
        return state;
    }

    public String getStateInfo() {
        return stateInfo;
    }

    private OrderStateEnum(int state, String stateInfo) {
        this.state = state;
        this.stateInfo = stateInfo;
    }

    /**
     * 依據傳入的state返回相應的enum值;
     */
    public static OrderStateEnum stateOf(int state) {
        for (OrderStateEnum stateEnum :values()) {
            if (stateEnum.getState() == state) {
                return stateEnum;
            }
        }
        return null;
    }
}
View Code

 

 

exceptions層:

主要是Service的超時錯誤  它的本質就是一個RuntimeException,用於操做超時拋出

這麼作的好處是若是超時,又涉及多個Service操做時,能夠輕鬆找到是哪一個地方超時

package com.how2java.exceptions;

public class OrderOperationException extends RuntimeException{
    public OrderOperationException(String msg){
        super(msg);
    }
}
View Code

 

 

mapper層:

則是SSM與數據庫直接進行交互的地方  用Sql語句來操做數據庫

 

pojo層:

項目要操做的實體類,裏面存放各類實例類(屬性以及set,get方法)

 

service層:

服務層由兩部分構成一部分是服務接口,一部分則是服務的具體實現

服務實現:則是將前臺獲取的信息就行具體處理:如文件存儲和數據庫存儲

則能夠調用事物來進行處理

並在調用mapper前進行簡單的邏輯判斷:檢查是否有必要調用maaper層,如若存取數據非法,在Service

便可直接進行處理並返回處理結果給Controller,如若數據合法,完成與數據庫無關的操做後就能夠調用mapper層來存儲數據庫了

設計多步驟,咱們要在Service的方法中添加@Transactional

如若一步出錯則執行回滾

 

test層:

此層爲測試層,用來對寫好的 mapper ,service,方法作單元測試

package com.how2java;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class BaseTest {
}
而後直接繼承BaseTest就能夠了 不用再寫junit配置


最後就是util層
這個主要是存放工具類
工具類爲各層反覆調用的方法,則能夠把它抽象出來 單獨建類
如:驗證碼校驗,圖片處理,前端提取Requset 傳來的Json,根據其鍵值 獲取值等



SSM後端部分結構根據個人理解,就大概是這樣。由於這個學期須要考研。還要準備畢業設計。

這個學期新作的O2O商城項目可能沒時間發佈到服務器了(由於Linux的路徑和Windows不一樣,項目路徑還須要從新調試)可能沒時間發佈了

 

在此也建議你們能夠利用大一大二時間好好學習。泳有必定的開發經驗。

若是想走Java後端方向:

能夠按這個學習

現學 Servelet  再剛SSM,作個SSM項目,後續能夠看看深刻理解Jvm,和高性能Mysql,netty等等

相關文章
相關標籤/搜索