1. 程式人生 > >mybatis框架知識點

mybatis框架知識點

標題Mybatis總結

## 標題Mybatis:是什麼
	是一款非常優秀的基於Java編寫的封裝JDBC操作的半自動化ORM持久層框架
	
## 標題Mybatis:作用
	實現資料庫的CRUD操作
	
## 標題Mybatis:為什麼使用
	    原JDBC操作資料庫存在的問題
	  	資料庫連線池重複建立和銷燬,浪費資源 ====>資料庫連線池
		存在很多硬編碼,資料庫連線四要素,SQL語句,輸入引數,解析結果====>配置檔案

標題Mybatis:使用步驟

	## 標題ORM + 資料庫連線(SqlMapConfig.xml) + SqlSession
    	XML
		>R:建立資料庫表,建立單表,多表(一對一,一對多,多對一,多對多)
		>O:建立模型類
			1.private宣告屬性
			2.型別使用包裝型別
			3.實現setter和getter方法
			4.對一模型類屬性的宣告,對多模型類集合屬性的宣告
		>M:對映檔案
			輸入對映、SQL語句、輸出對映
			<mapper namespace="對應DAO介面的類全名">
				<resultMap id="" type="">
					<id property="" column=""/>
					<result property="" column=""/>
					<association property="" javaType="" column="" select="">
						<!--說明select屬性和下面的標籤衝突,不可同時設定 -->
						<id property="" column=""/>
						<result property="" column=""/>
					</association>
					<collection property="" ofType="" column="" select="">
						<!--說明select屬性和下面的標籤衝突,不可同時設定 -->
						<id property="" column=""/>
						<result property="" column=""/>
					</collection>
				</resultMap>
				<select id="唯一標識" parameterType="傳入引數類全名|別名"
					resultType="返回值類全名|別名"|resultMap="外部resultMap的命名引用">
					select的SQL語句
				</select>
				<insert id="唯一標識" parameterType="傳入引數類全名|別名">
					<selectKey keyProperty="模型類主鍵屬性名"
						resultType="返回主鍵的型別" order="AFTER|BEFORE">
						獲取主鍵的SQL:select last_insert_id()|select uuid()
						<!--說明:order指定獲取主鍵SQL語句在insert的SQL語句前/後執行 -->
					</selectKey>
					insert的SQL語句
				</insert>
				<update id="唯一標識" parameterType="傳入引數類全名|別名">
					update的SQL語句
				</update>
				<delete id="唯一標識" parameterType="傳入引數類全名|別名">
					delete的SQL語句
				</delete>
				<!-- 
					#{}與${}區別:
						1.#{}佔位符,${}字串拼接
						2.如果為簡單資料型別 #{任意值} ${value}
						3.如果為pojo型別或pojo包裝型別 #{pojo屬性.屬性....},${}一致
				-->
				<!--動態SQL -->
				<if test=""></if>
				<where></where> <!--替換sql中的where並將第一個出現的and去掉 -->
				<set></set><!--替換sql中的set並將最後一個出現的,去掉 -->
				<foreach collection="" item="" open="" close="" separator=""></foreach>
					<!--
						collection:遍歷的集合
						item:接收每次遍歷結果的變數 使用${}使用
						open:迴圈開始執行一次
						close:迴圈結束執行一次
						separator:每次迴圈後拼接一次
					-->
				<sql id=""></sql>  <include refid=""/>
			</mapper>
		>資料庫連線SqlMapConfig.xml
			1.properties 引入外部的配置檔案,通過${key}使用
				<properties resource=""></properties>
			2.settings	設定mybatis的系統配置
				<!--瞭解,延遲載入 快取 -->
				<settings>
					<setting name="" value=""/>
				</settings>
			3.typeAliases 為模型類起別名,方法對映檔案編寫
				<!--別名不區分大小寫 -->
				<typeAliases>
					<typeAlias type="" alias=""/>
					<package name=""/> <!--模型類的包名-->
				</typeAliases>
			4.environments 資料庫連線資訊配置 後期交給spring管理
				連線池:POOLED UNPOOLED JNDI-->瞭解
			5.mappers 配置對映檔案
				<mappers>
					<mapper class="DAO介面類全名"/>
					<mapper resource="對映檔案路徑"/>
					<package name="DAO介面包名"/>
						<!--DAO介面要和對映檔案的包結構和名稱一致 -->
				<mappers>
		>SqlSession
			Resources:載入SqlMapConfig.xml主配置檔案
				InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
			SqlSessionFactoryBuilder:
				構建SqlSessionFactory,使用構建者模式封裝工廠的建立細節
				SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			SqlSessionFactory:
				通過builder的build(in)方法來建立,使用工廠模式降低類之間的依賴
				SqlSessionFactory factory = builder.build(in);
			SqlSession:mybatis和資料庫互動的橋樑,可以實現CRUD
				sqlSession.
					selectList() selectOne() insert() update() delete()
					commmit()  close() clearCache()
				sqlSession.getMapper(DAO介面.class);
					mapper代理方式開發,滿足的規範
						namespace要和DAO介面的全類名保持一致
						statement的ID要和DAO介面的方法名保持一致
						statement的parameterType要和方法的引數保持一致
						statement的resultType|resultMap要和方法的返回值保持一致。
			快取:一級快取和二級快取
				一級快取:sqlSession級別 單例 資料不共享
				二級快取: sqlSessionFactory級別 非單例 資料可以共享
	Annotation
		@Insert @Update @Delete @Select
		@Results(id="",value={
			@Result(id=true|false,property="",column=""),
			@Result(property="",column="",
[email protected]
( select="",fetchType=FetchType.LAZY|EAGER ),[email protected]( select="",fetchType=FetchType.LAZY|EAGER )), }) @ResultMap(value="")