Mybatis 3.5
發佈有段時間了,終於支持了 Optional
,這麼實用的特性,居然還沒人安利……因而本文出現了。git
文章比較簡單,但很是實用,由於能大量簡化噁心的判空代碼。github
WARNINGredis
因爲本文很是簡(low)單(比),我相信又會有相似以下的大佬出現(最近莫名其妙地被若干大佬噴,也不知道得罪誰了,必須高能預警一下,省得髒了大佬們的眼睛):spring
- 嫌低級噴:」這麼簡單文章也好意思寫,沒有源碼分析好意思拿出來!」——我源碼分析的文章也有小几十篇了,閱讀量更差。並且我寫文也不純粹迎合觀衆,我以爲有用,有價值,就總結下,之後本身也好備忘,僅此而已。
- 秀優越感噴:」你的文章沒有價值,看看我這篇」——真人真事,在某技術羣討論,吐槽了一圈後,貼出本身同類文章(帶源碼分析),對這種只能獻上本身的膝蓋,尊稱100聲大佬。
- 無腦噴:」你的文章就是一坨屎」——你纔是一坨屎,沒人逼着你看啊,本身找不開心啊咋地。
OK,預防針打過了,開始正文吧——編程
TIPSmybatis
簡單起見——app
- 本文直接用Mybaits的註解式編程,不把SQL獨立放在xml文件了
- 省略Service,直接Controller調用DAO
相信你們使用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) { // 拋異常,或者作點其餘事情 } } }
Mybatis 3.5支持Optional啦!你的代碼能夠這麼寫了:this
@Mapper public interface UserMapper { @Select("select * from user where id = #{id}") Optional<User> 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
也已跟進,引入以下依賴便可:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
然而,Mybatis
的配套設施還沒有跟進——
Mybatis Generator
插件還未跟進,這意味着目前使用該插件生成的代碼依然不會返回 Optional
,例如 selectByPrimaryKey
,返回的依然是 實體類
,而非 Optional<實體類>
。Optional
,筆者提Issue,詳見:建議支持Optional ,其實想支持很簡單,只需稍做修改便可。看最近時間,考慮提交PR。Spring Data
(jpa、redis、mongo…)花了很大力氣重構(不少包名都換了,API名稱也改了),率先支持了 Optional
,不得不說,在Java世界, Spring
確實走在前面,引領着Java圈子的潮流。
http://www.itmuch.com/other/mybatis-optional-support/