mybatis框架知識點
阿新 • • 發佈:2018-12-19
標題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="")