1.1MyBatis的下載
最新yBatis可以在github官網上下載:
https://github.com/mybatis/mybatis-3
1.2 Mybatis Jar包
1.3MyBatis工作原理
1.4Mybatis的整個的執行流程
MyBatis應用程序根據XML配置文件創建SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置文件,一處是Java代碼的注解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完之后關閉SqlSession。
2.第一個Mybatis程序
2.1、建立java項目
2.2、建立student表(id,name,age,socre)
2.3、定義實體Student
2.4、定義接口IStudentDao
2.5.1、定義主配置文件
在pdf中搜索”mybatis-3-config.dtd”關鍵字,即可找到映射文件的約束。
2.5.2主配置文件詳解
1)注冊DB連接四要素屬性文件
2)指定實體類全限定性類名的別名
對於實體類的全限定性類名的別名指定方式,一般合用<package/>方式,這樣做的好處是會將該包中所有實體類的簡單類型名指定為別名,寫法簡單方便
<!--<typeAlias type="com.jet.bean.Student" alias="Student" /> -->
<!--將指定包中所有類的簡單類型類名當做其別名 -->
<package name="com.jet.bean" />
3)指定映射文件
方式一:
<mappers>
<mapper resource="com/jet/dao/StudentMapper.xml"/>
</mappers>
方式二:
<mappers>
<mapper class="com.jet.dao.IStudentDao"/>
</mappers>
此方式,需要滿足以下幾個要求:
1) 映射文件名要與dao接口名稱相同
2) 映射文件要與接口在同一包中
3) 映射文件中的<mapper />的namespace屬性值為dao接口的全類名
<mapper namespace="com.jet.dao.IStudentDao ">
<insert id="insertStu" >
Insert into student(name,age,score)values(#{name},#{age},#{score});
</insert>
</mapper>
方式三:
當映射方件較多時,也可以使用如下形式。其中package的name屬性指定映射文件所放的包。
<mappers>
<package name="com.jet.dao"/>
</mappers>
這種方式的使用需要滿足以下幾個條件:
1) dao使用mapper動態代理實現
2) 映射文件名要與dao接口名稱相同
3) 映射文件名與接口在同一包中
4) 映射文件中的<mapper />的namespace屬性值為dao接口的全類名
2.5.3從屬性文件中讀取jdbc的相關連接信息——創建主屬性文件
2.6、定義映射文件mapper.xml,名稱無所謂,一般放在接口下面,在pdf中查找”mabatis-3-mapper”dtd約束
2.7.1、定義Dao的實現類
2.7.2、 API詳解
Dao中需要通過SqlSession對象來操作DB,而SqlSession對象的創建,需要其工廠對象SqlSessionFactory。SqlSessionFactory對象需要通過其構建器對象SqlSessionFactoryBuilder的build()方法,在加載了主配置文件的輸入流對象后創建。
(1) Resource類
用於讀取資源文件,其有很多方法通過加載並解析資源文件,返回不同類型的IO流對象。
(2) SqlSessionFactoryBuilder類
SqlSessionFactory的創建,需要使用SqlSessionFactoryBuilder對的build()方法。
(3) SqlSessionFactory
SqlSessionFactory接口對象是一個重量級對象(系統開銷大的對象),是線程安全的,所以一個應用只需要一個該對象即可。創建SqlSession需要使用SqlSessionFactory接口的openSession()方法。
(4)SqlSession接口
SqlSession接口用於持久化操作。一個SqlSession對應着一次數據庫會話,一次會話以SqlSession對象的創建開始,以SqlSession對象的關閉結束。
SqlSession接口對象是線程不安全的,所以每次數據庫會話結束前,需要馬上調用其close()方法,將其關閉。再次需要會話,再次創建。
而在關閉時會判斷當前SqlSession是否被提交;若沒有被提交,則會執行回滾。若已被提交,則直接將SqlSession關閉。
2.7.8、源碼分析
1、輸入流的關閉Resources
2、SqlSession的創建
3、增刪改查的執行
4、SqlSession的commit()
5、Sqsession的close
2.8、定義測試類
2.9、添加日志控件文件
2.10、使用junit運行測試類,成功插入數據到數據庫