天天看點

項目總結2——mybatis配置的了解

之前的項目基本上都是用mongodb,以至于mysql相關的知識異常薄弱,這次連續一個半月的加班,總算是實際用到了mysql,也使自己對mysql了解的更多,對mybatis了解的更多,這裡就說一說經過這一個項目,我對mybatis配置的進一步了解。

一般來說,一個比較完整的mybatis檔案大概如下:

上邊我标注了一至四四個部分,正常情況來說,這基本的四部分是必不可少的,下邊是我對這四部分的了解:

第一部分是mybatis配置檔案必不可少的,也可以說是基本固定的,算是mybatis檔案的頭部聲明,以便于spring掃描時能夠知道這是個mybatis檔案,進而正常的解析。

第二部分namespace,直接指向我們對應的dao接口的完整路徑,包括包名和類名,這個就需要根據不同的dao接口進行适當的改變。

第四部分是我們操作資料庫的sql語句,結合mybatis的一些标簽使mybatis生成正确的sql語句,這一步分很重要,主要涉及到sql語句和編寫和mysql标簽的使用。

而我這裡要着重說明的是第三部分,因為有比較長的一段時間我并不能真正的了解這個配置具體的含義,以至于實際運用中犯了若幹個錯誤。

在這一部分中又可以分為幾個比較小的部分,其中的id,相信了解spring的都應該明白是什麼意思以及他的作用,就像我們這裡第四部分resultmap="hostcollection"就直接引用了這個id。

接下來的type,這裡是直接指向的我們java代碼中的實體類,和dao接口一樣需要完整的路徑,即完整包名和類名。

最重頭的其實在下邊,也就是我們可以看到的若幹個重複的result,以及result裡邊的column和property以及jdbctype。

很早以前,我知道這裡是資料庫和實體類的對應,但是并不明白究竟是怎麼個對應法,是以有一次我column配的是實體類的屬性名,而property配的則是資料庫中的字段名。由于當時的名字都起得一模一樣,也就導緻程式正常運作,我以為這樣就是對的。

但是後來在一個新的mybatis配置中,我依然這樣的配置,結果由于資料庫字段名和實體類的屬性名并不一樣,就導緻程式無法正常運作,最後我一番修改後,把column對應到了資料庫中的字段名,把property對應到了實體類的屬性名。

然後,因為sql不是太麻煩,不論是查詢條件還是傳回結構都沒有額外的字段,是以這樣之後運作程式也再次正常,于是我便以為這樣便是對的。

知道最近,又一次的業務需求,使得傳回值不僅僅包括資料庫表中原有的字段,經過了一番掙紮後,我才終于發現,原來property确實是對應實體類的屬性。

但是,column實際上對應的是mybatis中sql語句的傳回值,而不是我之前是以為的資料庫表中的實際字段。

至此,我覺得自己大概算是真正的了解了mybatis配置的具體含義,隻是不知道是不是還有下一次遇到新的問題,然後再像之前一樣,繼續推翻這個了解。