springboot整合Mybatis出現的玄學問題

前言

  最近使用springboot+mybatis創建了一個項目試着玩一玩,結果就出現了玄學問題。我覺得有必要記錄下來。第一個就是 @MapperScan()註解失效 ,第二個就是在service裏注入mapper居然報紅。第三個就是配置實體類的包IDEA居然不識別,具體情況下面再說。

過程

  項目的創建沒有什麼問題,如今springboot都已經出到2.2.5版本了,我就稍稍往前,用一用2.1.7版本。首先,去掉tomcat,加上undertow,然後直接啓動,發現失敗了,一看報錯,這意思似乎是沒有連接數據庫,我記得擱以前,好像不用數據庫連接就能啓動,也不知道是不是我記錯了。
  配置好數據庫,啓動,沒毛病,完美運行。然後就是使用mybatis來試一試,也沒什麼好配置的,就是一個實體類包名,mapper.xml文件位置,這都沒啥。接下來就是寫mapper接口,寫service。然後我也是看別人的,這叫優雅的整合mybatis,使用@MappperScan註解,告訴springboot有關mapper的接口都在這裏面。
  可是,萬萬沒想到,我一啓動,它告訴我,在這個包裏沒有掃描到mapper。這不是搞笑呢,怎麼會找不到呢。後來,我靈機一動,不用@MapperScan註解,在mapper接口上寫@mapper註解,這樣就能正常啓動了。
  但是吧我不知道怎麼就發現了,service裏注入的mapper報紅,雖然它不影響運行,但是我看着就是很不舒服,於是,我就找各種解決辦法,發現還是網友神通廣大,確實有解決辦法,比如我搜的前幾條都是選擇將IDEA的提示error級別降低,變成warning級別,我總感覺這種不好,就繼續找解決辦法,沒想到還真有看起來更靠譜的解決辦法。
  有這麼幾種解決辦法:

  1. 使@Autowired註解允許null,即 @Autowired(required = false).
  2. 使用構造器的方式注入。
  3. 使用 @Resource

  當然,還有的大神說安裝mybatis plugins就行,一裝就好,但是我找不到這個插件,只找到了Free mybatis plugins,而且這個似乎不行。我倒是比較相中這個第三種,簡單,好使。

玄學出現了

  在我搜索上述問題的時候,神奇的事情發生了,@MapperScan這個註解又好使了。這是個極其神奇的事情。我記得,我剛開始是@MapperScan(“com.xxx”)這樣寫,不好使,我又這樣寫@MapperScan(basePackages = “com.xxx”),它就行了,好使了。然後我又把basePackages去掉,居然還能用,沒有什麼區別,這就很疑惑了,我來來回回換了幾遍,都沒有問題。這真是讓我摸不着頭腦。也不知道下次會出現什麼玄學。
  還有就是理論上當我在application.yml文件中

mybatis:
  type-aliases-package: com.xiumu.model.entity

一旦配置完這個,那麼我在mapper.xml文件中parameterType屬性只需要寫實體類名就可以。但是吧,IDEA表示拒絕,寫實體類名就是要標紅。插入,查詢確實沒有什麼問題。但是吧,看着這個標紅實在是不得勁。開發時間比較緊,我就先不管它了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章