mybatisdao接口原理 Service層和Dao層真的有必要每個類都加上接口嗎?
Service層和Dao層真的有必要每個類都加上接口嗎?簡單來說就是看情況。主要看你項目:變動情況以及架構(gòu)人員項目情況比如,項目原來使用的hibernate,后續(xù)可能要切換為mybatis,那么dao
Service層和Dao層真的有必要每個類都加上接口嗎?
簡單來說就是看情況。
主要看你項目:
- 變動情況
- 以及架構(gòu)
- 人員
- 項目情況
比如,項目原來使用的hibernate,后續(xù)可能要切換為mybatis,那么dao就需要使用接口。這就不會影響上層代碼的修改。
再比如,項目是個單體應(yīng)用,任何代碼的修改都需要重新編譯整個項目,那可以不用接口。而如果項目是分模塊編譯部署的,那就可以使用接口解耦,假設(shè)dao有修改,只需要重新編譯部署dao模塊即可,不影響上層模塊。
再來,如果項目組新手較多,可能簡單的代碼結(jié)構(gòu)更適合。復(fù)雜項目結(jié)構(gòu)的學(xué)習(xí)成本要高。
假如,項目進度很急,可以使用簡單粗暴的方式先擼~
可以用經(jīng)濟學(xué)上的成本來解釋原因。
經(jīng)濟學(xué)上的成本定義是:你做一件事,所放棄的其它事情中,價值最大的那件事的價值就是你做這件事的成本。
你使用接口的成本就是你不使用接口所花費的成本(包括后續(xù)的維護成本)。
如果項目變動多、模塊部署、項目不急,那使用接口的成本就低于不使用接口的成本,雖然早期可能不用接口看起來更簡單;反之,則不用接口的成本低,甚至框架都可以不使用~
畢竟工具是為了提高效率的,何必和自己過不去呢!
使用mybatisplus,如何定義service層和dao層?
根據(jù)MyBatis-Plus的設(shè)計模式,那些接受條件Conditional或則和Wrapper的參數(shù)的方法,Conditional或者Wrapper對象本省就是參數(shù)!
你例子中:
userMapper.selectOne(new QueryWrapper<User>().eq("user_age", age))
這個Mapper方法算是DAO層的,它接受一個來自Service層傳遞的對象 QueryWrapper。你思維定勢,認(rèn)為userMapper.selectOne(new QueryWrapper<User>().eq("user_age", age)) 才是一個DAO方法整體,不是的??!
所以就算別的Servcie再調(diào)用這個
userMapper.selectOne(),你只需要定制創(chuàng)建的Wrapper對象就可以啦。
記?。悍椒ㄈ?yún)⒕褪侨雲(yún)?,其他什么也不是?/p>