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


博主因為打算要考研,所以為了給自己留一手后路。學習了SSM框架。這學期就做了一個完整的SSM項目。(如果考研失敗就去外包做一波CRUD boy)

所以邊考研邊利用業余時間做了一學期,接着期末一周的Web課設時間終於把這個項目1.0搞定了。

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

自己以前做項目就是方法,類什么的都放得比較亂,經過這次完整項目開發。了解了不僅前后端要分離,后端也要分類別類的存放,這樣有利於后期的修改以及

讓人看起來神清氣爽,至少這樣做確實如果后期要修改之前的代碼會方便很多。

 

在后端:

 主要目錄就是這幾個

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

轉換格式后

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

 

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等等

   

 


免責聲明!

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



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