真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Mvc模式下SSM環(huán)境是什么

這篇文章主要介紹“Mvc模式下SSM環(huán)境是什么”,在日常操作中,相信很多人在Mvc模式下SSM環(huán)境是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Mvc模式下SSM環(huán)境是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

從事成都服務(wù)器托管,服務(wù)器租用,云主機(jī),雅安服務(wù)器托管,域名申請(qǐng),CDN,網(wǎng)絡(luò)代維等服務(wù)。

一、分層策略

MVC模式與代碼分層策略,MVC全名是ModelViewController即模型-視圖-控制器,作為一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶(hù)交互的同時(shí),不需要重新編寫(xiě)業(yè)務(wù)邏輯,這是一種開(kāi)發(fā)模式,但并不是實(shí)際開(kāi)發(fā)中代碼的分層模式,通常SSM框架的后端代碼分層如下:

Mvc模式下SSM環(huán)境是什么

  • controller控制層:定義服務(wù)端接口,入?yún)⒊鰠ⅲ鸵恍┤雲(yún)⑿r?yàn);

  • service業(yè)務(wù)服務(wù)層:組裝業(yè)務(wù)邏輯,業(yè)務(wù)校驗(yàn),構(gòu)建控制層需要的參數(shù)模型;

  • dao數(shù)據(jù)交互層:提供服務(wù)層需要的數(shù)據(jù)查詢(xún)方法,處理數(shù)據(jù)交互條件相關(guān)的邏輯;

  • mapper持久層:基于mybatis框架需要的原生支持,目前很常用的持久層組件;

二、控制層

1、Rest接口風(fēng)格

基于資源訪問(wèn)和處理的邏輯,使用不同風(fēng)格的注解。例如資源新增,更新,查詢(xún),刪除。

/**
 * 新增
 */
@PostMapping("/insert")
public Integer insert (@RequestBody BaseInfo baseInfo){
    return baseInfoService.insert(baseInfo);
}
/**
 * 更新
 */
@PutMapping("/update/{id}")
public String update(@PathVariable(value = "id") Integer id,
                     @RequestBody BaseInfo baseInfo) {
    if (id<1){
        return "error";
    }
    baseInfo.setId(id);
    return "update="+baseInfoService.update(baseInfo);
}
/**
 * 主鍵查詢(xún)
 */
@GetMapping("/detail/{id}")
public InfoModel detail(@PathVariable(value = "id") Integer id) {
    return baseInfoService.detail(id) ;
}
/**
 * 主鍵刪除
 */
@DeleteMapping("/delete/{id}")
public String delete(@PathVariable(value = "id") Integer id) {
    baseInfoService.delete(id) ;
    return "SUS" ;
}

2、接口復(fù)用度

不建議接口高度復(fù)用,例如增刪改查都各自對(duì)接接口即可,基本原則,不同的客戶(hù)端端操作,對(duì)于獨(dú)立的接口。

/**
 * 列表加載
 */
@GetMapping("/list")
public List list() {
    return baseInfoService.list(new BaseInfoExample()) ;
}
/**
 * 列表搜索
 */
@PostMapping("/search")
public List search (@RequestParam("userName") String userName,
                              @RequestParam("phone") String phone) {
    return baseInfoService.search(userName,phone) ;
}

例如常見(jiàn)的list接口,list通常都有會(huì)按條件加載的search機(jī)制,而且搜索的判斷條件很復(fù)雜,建議分為兩個(gè)接口,從實(shí)際考慮,大部分場(chǎng)景下都是只使用list接口,很少使用search搜索。

3、入?yún)⒊鰠?/strong>

校驗(yàn)客戶(hù)端必須條件,例如某某條件必填必選等,如果有問(wèn)題,快速阻斷請(qǐng)求鏈路,做到程序入口控制層攔截返回。

@PutMapping("/update/{id}")
public String update(@PathVariable(value = "id") Integer id,
                     @RequestBody BaseInfo baseInfo) {
    if (id<1){
        return "error";
    }
    baseInfo.setId(id);
    return "update="+baseInfoService.update(baseInfo);
}

參數(shù)在三個(gè)以下,可以直接陳列入?yún)?,參?shù)在三個(gè)或三個(gè)以上可以使用實(shí)體類(lèi)統(tǒng)一封裝。

@PostMapping("/search")
public List search (@RequestParam("userName") String userName,
                              @RequestParam("phone") String phone) {
    return baseInfoService.search(userName,phone) ;
}

4、參數(shù)處理

出參格式處理度基本原則,服務(wù)器作為公共資源,避免非必要操作,例如客戶(hù)端可自行判斷返回值是否為空,null等,或者一些常見(jiàn)格式處理,利用客戶(hù)端適當(dāng)分擔(dān)服務(wù)器壓力。

三、業(yè)務(wù)服務(wù)層

1、業(yè)務(wù)校驗(yàn)

例如傳入訂單號(hào),經(jīng)過(guò)數(shù)據(jù)庫(kù)層查詢(xún),沒(méi)有訂單數(shù)據(jù),這里稱(chēng)為業(yè)務(wù)性質(zhì)的異常,代碼本身沒(méi)有問(wèn)題,但是業(yè)務(wù)邏輯無(wú)法正常執(zhí)行。

public InfoModel detail(Integer id){
    BaseInfo baseInfo = baseInfoDao.selectByPrimaryKey(id) ;
    if (baseInfo != null){
        DetailInfoEntity detailInfoEntity = detailInfoDao.getById(id);
        if (detailInfoEntity == null){
            LOG.info("id="+id+"數(shù)據(jù)缺失 DetailInfo");
        }
        return buildModel(baseInfo,detailInfoEntity) ;
    }
    LOG.info("id="+id+"數(shù)據(jù)完全缺失");
    return null ;
}

2、組裝業(yè)務(wù)邏輯

通常情況下服務(wù)層作為邏輯做復(fù)雜的一塊,用來(lái)拼接業(yè)務(wù)核心步驟,可以通過(guò)業(yè)務(wù)邏輯判定,一步一步執(zhí)行程序,避免在程序入口做大量可能用到的對(duì)象創(chuàng)建和需求數(shù)據(jù)查詢(xún)。

public int insert (BaseInfo record){
    record.setCreateTime(new Date());
    int insertFlag = baseInfoDao.insert(record);
    if (insertFlag > 0){
        DetailInfoEntity detailInfoEntity = new DetailInfoEntity();
        detailInfoEntity.setUserId(record.getId());
        detailInfoEntity.setCreateTime(record.getCreateTime());
        if(detailInfoDao.save(detailInfoEntity)){
            return insertFlag ;
        }
    }
    return insertFlag;
}

3、數(shù)據(jù)模型構(gòu)建

通常情況業(yè)務(wù)層是偏復(fù)雜的,如果想關(guān)快速理解業(yè)務(wù)層,可以對(duì)復(fù)雜的業(yè)務(wù)方法,在提供一個(gè)返參構(gòu)建的方法,用來(lái)處理服務(wù)層要向控制層回傳的參數(shù),這樣可以讓重度的服務(wù)層方法變的清晰。

private InfoModel buildModel (BaseInfo baseInfo,DetailInfoEntity detailInfo){
    InfoModel infoModel = new InfoModel() ;
    infoModel.setBaseInfo(baseInfo);
    infoModel.setDetailInfoEntity(detailInfo);
    return infoModel ;
}

四、數(shù)據(jù)交互層

1、逆向工程

這里以使用mybatis框架或者mybatis-plus框架作為參考。如果是mybatis框架,建議逆向工程的模板代碼不做自定義的修改,如果需要自定義方法,在mapper和xml層面再自定義一個(gè)擴(kuò)展文件,用來(lái)存放自定義的方法和SQL邏輯,這樣避免表結(jié)構(gòu)變動(dòng)大引發(fā)的強(qiáng)烈不適。

Mvc模式下SSM環(huán)境是什么

當(dāng)然現(xiàn)在大部分都會(huì)mybatis-plus作為持久層組件,可以避免上述問(wèn)題。

2、數(shù)據(jù)交互

針對(duì)業(yè)務(wù)層的需要,提供相應(yīng)的數(shù)據(jù)查詢(xún)方法,只處理與數(shù)據(jù)庫(kù)交互的邏輯,避免出現(xiàn)業(yè)務(wù)邏輯,尤其在分布式架構(gòu)下,不同服務(wù)的數(shù)據(jù)查詢(xún)和組裝,不應(yīng)該出現(xiàn)在該層。

public interface BaseInfoDao {

    int insert(BaseInfo record);

    List selectByExample(BaseInfoExample example);

    int updateByPrimaryKey(BaseInfo record);

    BaseInfo selectByPrimaryKey(Integer id);

    int deleteByPrimaryKey(Integer id);

    BaseInfo getById (Integer id) ;
}

到此,關(guān)于“Mvc模式下SSM環(huán)境是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


網(wǎng)頁(yè)標(biāo)題:Mvc模式下SSM環(huán)境是什么
標(biāo)題URL:http://weahome.cn/article/pjpjso.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部