我最喜歡的Mybatis 3.5新特性——Optional支持

文章比較簡單,但很是實用,由於能大量簡化噁心的判空代碼。git

WARNINGgithub

因爲本文很是簡(low)單(比),我相信又會有相似以下的大佬出現(最近莫名其妙地被若干大佬噴,也不知道得罪誰了,必須高能預警一下,省得髒了大佬們的眼睛):redis

嫌低級噴:」這麼簡單文章也好意思寫,沒有源碼分析好意思拿出來!」——我源碼分析的文章也有小几十篇了,閱讀量更差。並且我寫文也不純粹迎合觀衆,我以爲有用,有價值,就總結下,之後本身也好備忘,僅此而已。 秀優越感噴:」你的文章沒有價值,看看我這篇」——真人真事,在某技術羣討論,吐槽了一圈後,貼出本身同類文章(帶源碼分析),對這種只能獻上本身的膝蓋,尊稱100聲大佬。 無腦噴:」你的文章就是一坨屎」——你纔是一坨屎,沒人逼着你看啊,本身找不開心啊咋地。 OK,預防針打過了,開始正文吧——spring

TIPS編程

簡單起見——mybatis

本文直接用Mybaits的註解式編程,不把SQL獨立放在xml文件了 省略Service,直接Controller調用DAO Beforeapp

相信你們使用Mybatis時代碼是這樣寫的:spring-boot

@Mapper public interface UserMapper { @Select("select * from user where id = #{id}") User selectById(Long id); } 而後,業務代碼是這樣寫的:源碼分析

public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/{id}") public User findById(@PathVariable Long id) { User user = this.userMapper.selectById(id); if(user == null) { // 拋異常,或者作點其餘事情 } } } Afterthis

Mybatis 3.5支持Optional啦!你的代碼能夠這麼寫了:

@Mapper public interface UserMapper { @Select("select * from user where id = #{id}") Optional selectById(Long id); } 而後,業務代碼能夠變成這樣:

public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/{id}") public User findById(@PathVariable Long id) { return this.userMapper.selectById(id) .orElseThrow(() -> new IllegalArgumentException("This user does not exit!")); } } 今後,不再須要像之前同樣寫一大堆代碼去判斷空指針了。

至於 Optional 怎麼使用,本文不做贅述——JDK 12都發布了,你要我普及JDK 8的」新特性」嗎?你們自行百度吧,百度不少了。關鍵詞:Java 8 Optional 。

思考

Mybatis 已支持 Optional ,Mybatis Spring Boot Starter 也已跟進,引入以下依賴便可:

org.mybatis.spring.boot mybatis-spring-boot-starter 2.0.0 然而,Mybatis 的配套設施還沒有跟進——

官方提供的 Mybatis Generator 插件還未跟進,這意味着目前使用該插件生成的代碼依然不會返回 Optional ,例如 selectByPrimaryKey ,返回的依然是 實體類 ,而非 Optional<實體類> 。 國內最流行的第三方Mybaits加強 Mybatis通用Mapper ,及其配套的 通用Mapper專用生成器 都還沒有支持Optional ,筆者提Issue,詳見:建議支持Optional ,其實想支持很簡單,只需稍做修改便可。看最近時間,考慮提交PR。 balabala Spring Data(jpa、redis、mongo…)花了很大力氣重構(不少包名都換了,API名稱也改了),率先支持了 Optional ,不得不說,在Java世界, Spring 確實走在前面,引領着Java圈子的潮流。

配套代碼

GitHub:github.com/eacdy/sprin…

Gitee:gitee.com/itmuch/spri…

相關文章
相關標籤/搜索