国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

mybatisdao接口原理 Service層和Dao層真的有必要每個(gè)類(lèi)都加上接口嗎?

Service層和Dao層真的有必要每個(gè)類(lèi)都加上接口嗎?簡(jiǎn)單來(lái)說(shuō)就是看情況。主要看你項(xiàng)目:變動(dòng)情況以及架構(gòu)人員項(xiàng)目情況比如,項(xiàng)目原來(lái)使用的hibernate,后續(xù)可能要切換為mybatis,那么dao

Service層和Dao層真的有必要每個(gè)類(lèi)都加上接口嗎?

簡(jiǎn)單來(lái)說(shuō)就是看情況。

主要看你項(xiàng)目:

  • 變動(dòng)情況
  • 以及架構(gòu)
  • 人員
  • 項(xiàng)目情況

比如,項(xiàng)目原來(lái)使用的hibernate,后續(xù)可能要切換為mybatis,那么dao就需要使用接口。這就不會(huì)影響上層代碼的修改。

再比如,項(xiàng)目是個(gè)單體應(yīng)用,任何代碼的修改都需要重新編譯整個(gè)項(xiàng)目,那可以不用接口。而如果項(xiàng)目是分模塊編譯部署的,那就可以使用接口解耦,假設(shè)dao有修改,只需要重新編譯部署dao模塊即可,不影響上層模塊。

再來(lái),如果項(xiàng)目組新手較多,可能簡(jiǎn)單的代碼結(jié)構(gòu)更適合。復(fù)雜項(xiàng)目結(jié)構(gòu)的學(xué)習(xí)成本要高。

假如,項(xiàng)目進(jìn)度很急,可以使用簡(jiǎn)單粗暴的方式先擼~

可以用經(jīng)濟(jì)學(xué)上的成本來(lái)解釋原因。

經(jīng)濟(jì)學(xué)上的成本定義是:你做一件事,所放棄的其它事情中,價(jià)值最大的那件事的價(jià)值就是你做這件事的成本。

你使用接口的成本就是你不使用接口所花費(fèi)的成本(包括后續(xù)的維護(hù)成本)。

如果項(xiàng)目變動(dòng)多、模塊部署、項(xiàng)目不急,那使用接口的成本就低于不使用接口的成本,雖然早期可能不用接口看起來(lái)更簡(jiǎn)單;反之,則不用接口的成本低,甚至框架都可以不使用~

畢竟工具是為了提高效率的,何必和自己過(guò)不去呢!

使用mybatisplus,如何定義service層和dao層?

根據(jù)MyBatis-Plus的設(shè)計(jì)模式,那些接受條件Conditional或則和Wrapper的參數(shù)的方法,Conditional或者Wrapper對(duì)象本省就是參數(shù)!


你例子中:

userMapper.selectOne(new QueryWrapper<User>().eq("user_age", age))

這個(gè)Mapper方法算是DAO層的,它接受一個(gè)來(lái)自Service層傳遞的對(duì)象 QueryWrapper。你思維定勢(shì),認(rèn)為userMapper.selectOne(new QueryWrapper<User>().eq("user_age", age)) 才是一個(gè)DAO方法整體,不是的!!


所以就算別的Servcie再調(diào)用這個(gè)

userMapper.selectOne(),你只需要定制創(chuàng)建的Wrapper對(duì)象就可以啦。


記住:方法入?yún)⒕褪侨雲(yún)?,其他什么也不是?/p>