1. 程式人生 > >【spring boot+mybatis】註解使用方式(無xml配置)設定自動駝峰明明轉換(mapUnderscoreToCamelCase),IDEA中xxDao報錯could not autowi

【spring boot+mybatis】註解使用方式(無xml配置)設定自動駝峰明明轉換(mapUnderscoreToCamelCase),IDEA中xxDao報錯could not autowi

最近使用spring boot+mybatis,使用IntelliJ IDEA開發,記錄一些問題的解決方法。

1、在使用@Mapper註解方式代替XXmapper.xml配置檔案,使用@Select等註解配置sql語句的情況下,如何配置資料庫欄位名到JavaBean實體類屬性命的自動駝峰命名轉換?

設定自動駝峰命名轉換,在xml中可以直接配置mapUnderscoreToCamelCase屬性。

但是使用註解方式時,經過一番查詢資料才找到比較好的設定方法。如下:

在spring boot的配置檔案application.properties中,加入配置項:

1 mybatis.configuration.mapUnderscoreToCamelCase=true
2 3 mybatis.configuration.map-underscore-to-camel-case=true

設為true表示開啟駝峰轉換。經過試驗,兩種配置方法都可以。但如果同時配置,前者mybatis.configuration.mapUnderscoreToCamelCase的優先順序更高。

參考:

另外查到有通過javaConfig方式,配置org.apache.ibatis.session.SqlSessionFactory的Bean,放入spring的物件池。mapUnderscoreToCamelCase是org.apache.ibatis.session.Configuration的一個屬性,例項化Configuration物件並將其mapUnderscoreToCamelCase屬性設為true,再使用這個Configuration物件作為SqlSessionFactory的配置即可使mapUnderscoreToCamelCase=true生效。

但是僅僅為了改變一個屬性的值,就自己編碼生成一個SqlSessionFactory未免太繁瑣了些。使用在application.properties中配置的方法更方便。

2.mybatis管理的@Mapper的Dao,在使用@Autowire自動注入時,IDEA有紅色報錯“could not autowire”,但實際執行時正常,如何去除報錯?

按照本人的理解,這個報錯是由於Dao介面只添加了mybatis自定義的@Mapper註解,沒有新增spring定義的@Component、@Repository等,所以IDEA不認為這是納入Spring管理的Bean,導致在IDEA找不到autowire的Dao的來源。

查詢解決方法,找到了這裡的問答:

裡面提到安裝【MyBatis plugin】外掛可以解決,但是我嘗試安裝這個外掛並啟用後,仍然有紅色報錯(外掛已經啟用,不是license導致的問題),所以猜測這個外掛可能是隻針對XXmapper.xml配置的方式有效,而對@Mapper註解Dao interface的方式無效(針對後一種情況是否有效,大家嘗試了可以反饋下結果)

所以只好採用一種折中的不算完美的辦法,在Dao interface中新增@Mapper的同時,再新增@Repository(或者@Component也可以),如下方程式碼的第1行:

複製程式碼
1 @Repository
2 @Mapper
3 public interface UserDao {
4 
5     @Select("SELECT phone FROM user WHERE name = #{name}") //動態傳入表名,可以使用 ...FROM ${tableName}... ,但需要解決sql注入風險
6     String getPhoneByUserName(@Param("name") String name);
7 }
複製程式碼

這個方法使用中看來也沒有什麼副作用。

PS:第一次試安裝【MyBatis plugin】外掛之後,啟動後在IDEA的Event視窗中有以下輸出:

1 Mybatis Plugin: Mybatis Plugin is not activated yet. Click here to enter your license key to activate the plugin. You can also click here to purchase a license key to sponsor us making the plugin better. More features are on their way. Wish you happy coding with the plugin