對本博客的mybatis從新讀一下,作一個整理。以下:java
1:爲何會有mybatis,由於原生的jdbc方式有很大問題:程序員
(1)數據庫鏈接,使用時就建立,不使用當即釋放,對數據庫進行頻繁鏈接開啓和關閉,形成數據庫資源浪費,影響 數據庫性能。spring
設想:使用數據庫鏈接池管理數據庫鏈接。sql
(2)、將sql語句硬編碼到java代碼中,若是sql 語句修改,須要從新編譯java代碼,不利於系統維護。數據庫
設想:將sql語句配置在xml配置文件中,即便sql變化,不須要對java代碼進行從新編譯。mybatis
(3)、向preparedStatement中設置參數,對佔位符號位置和設置參數值,硬編碼在java代碼中,不利於系統維護。app
設想:將sql語句及佔位符號和參數所有配置在xml中。性能
(4)、從resutSet中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,,不利於系統維護。測試
設想:將查詢的結果集,自動映射成java對象。ui
2:mybatis開發流程:
(1)先創建下SqlSessionFactoryBuilder:經過SqlSessionFactoryBuilder建立會話工廠SqlSessionFactory
(2)經過SqlSessionFactory建立SqlSession,使用單例模式管理sqlSessionFactory(工廠一旦建立,使用一個實例)。未來mybatis和spring整合後,使用單例模式管理sqlSessionFactory。
(3)sqlSession的誕生過程是這樣的:經過SqlSessionFactory建立一個SqlSession.
3:DAO開發分紅兩個方面:
(1)傳統的DAO方式:
程序員須要寫dao接口以及dao的實現類。
在DAO的實現類中有變量:SqlSessionFactory 。
這個SqlSessionFactory變量在測試方法中寫入。
(2)Mapper的開發方式
我先給出mapper代理開發的思路(mapper代理開發的規範):
咱們用mapper代理開發時要寫2個:
1.mapper.xml
2.mapper接口
咱們寫的mapper接口只要須要遵循一些開發規則,mybatis能夠自動生成mapper接口實現類代理對象。(這句話很重要)
咱們重點講一下開發規則:
開發規範:
一、在mapper.xml中namespace等於mapper接口地址
二、mapper.java接口中的方法名和mapper.xml中statement的id一致
mapper.xml中是這樣的:
mapper.java接口應該是這樣的:
名字要如出一轍的。
三、mapper.java接口中的方法輸入參數類型和mapper.xml中statement的parameterType指定的類型一致。
四、mapper.java接口中的方法返回值類型和mapper.xml中statement的resultType指定的類型一致。
4:在寫mapper.xml時,裏面有映射。分爲兩種:resultType和resultMap:
resultType,pojo的名字和mapper.xml中配置的名字如出一轍才能映射成功。
resultMap沒有上面的要求,能夠本身創建映射關係。
一對多怎麼映射:用collection。
多對多怎麼映射:用collection。
5:與spring的整合
(1)原始DAO開發的整合方式:
咱們之前要用Mybatis是須要sqlMapConfig.xml(這個配置文件須要配置dataource,以及mapper.xml文件。)原始的sqlMapConfig.xml以下:
如今咱們加入spring以後,database就要交給spring的配置文件applicationContext.xml來處理了。並且咱們之前在用Dao時,傳統的作法是要在Dao類中有SqlSessionFactory,如今用Spring以後,最主要的改變就是這裏了。
須要spring經過單例方式管理SqlSessionFactory。
spring和mybatis整合生成代理對象,使用SqlSessionFactory建立SqlSession。(spring和mybatis整合自動完成)
application.xml的配置文件以下:
(2)mapeer代理開發整合: