MyBatis【钢镚核恒】
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                MyBatis【钢镚核恒】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                MyBatis
簡介
- MyBatis是優秀的持久層框架, 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。
 - MyBatis使用XML將SQL與程序解耦,便于維護
 - MyBatis學習簡單,執行高效,是JDBC的延伸
 
拓展:
持久化:即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。
持久層:完成持久化工作的代碼塊 . ----> dao層 【DAO (Data Access Object) 數據訪問對象】
官方文檔:https://mybatis.org/mybatis-3/zh/index.html
入門
SqlSessionFactory
- SqlSessionFactory是MyBatis的核心對象
 - 用于初始化MyBatis,創建SqlSession對象
 - 保證SqlSessionFactory在應用中全局唯一
 
SqlSession
- SqlSession是MyBatis操作數據庫的核心對象
 - SqlSession使用JDBC方式與數據庫交互
 - SqlSession對象提供了數據表CRUD對應方法
 
配置
- properties(屬性)
 - settings(設置)
 - typeAliases(類型別名)
 - typeHandlers(類型處理器)
 - objectFactory(對象工廠)
 - plugins(插件)
 - environments(環境配置) 
- environment(環境變量) 
- transactionManager(事務管理器)
 - dataSource(數據源)
 
 
 - environment(環境變量) 
 - databaseIdProvider(數據庫廠商標識)
 - mappers(映射器)
 
映射文件
頂級元素
- cache – 該命名空間的緩存配置。
 - cache-ref – 引用其它命名空間的緩存配置。
 - resultMap – 描述如何從數據庫結果集中加載對象,是最復雜也是最強大的元素。
 - parameterMap – 老式風格的參數映射。此元素已被廢棄,并可能在將來被移除!請使用行內參數映射。文檔中不會介紹此元素。
 - sql – 可被其它語句引用的可重用語句塊。
 - insert – 映射插入語句。
 - update – 映射更新語句。
 - delete – 映射刪除語句。
 - select – 映射查詢語句。
 
Select 元素的屬性
<selectid="selectPerson"parameterType="int"parameterMap="deprecated"resultType="hashmap"resultMap="personResultMap"flushCache="false"useCache="true"timeout="10"fetchSize="256"statementType="PREPARED"resultSetType="FORWARD_ONLY">Insert, Update, Delete 元素的屬性
<insertid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"keyProperty=""keyColumn=""useGeneratedKeys=""timeout="20"><updateid="updateAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20"><deleteid="deleteAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20">sql片段:這個元素可以用來定義可重用的 SQL 代碼片段
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>結果映射:給數據庫屬性取別名
<resultMap id="userResultMap" type="User"><id property="id" column="user_id" /><result property="username" column="user_name"/><result property="password" column="hashed_password"/> </resultMap> <select id="selectUsers" resultMap="userResultMap">select user_id, user_name, hashed_passwordfrom some_tablewhere id = #{id} </select>兩種傳值方式
- ${} 文本替換,未經任何處理對SQL文本替換
 - #{} 預編譯傳值,使用預編譯傳值可以預防SQL注入
 
工作流程圖
日志
- 日志文件是用于記錄系統操作事件的記錄文件或文件集合
 - 日志保存歷史數據,是診斷問題以及理解系統活動的重要依據
 
動態 SQL
動態 SQL 是 MyBatis 的強大特性之一。
- if
 - choose (when, otherwise)
 - trim (where, set)
 - foreach
 
緩存
- —級緩存默認開啟,緩存范圍SqISession會話
 - 二級緩存手動開啟,屬于范圍Mapper Namespace
 
二級緩存運行規則:
- 二級開啟后默認所有查詢操作均使用緩存
 - 寫操作commit提交時對該namespace緩存強制清空
 - 配置useCache=false可以不用緩存
 - 配置flushCache=true代表強制清空緩存
 
開啟二級緩存:
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>ResultMap
一對多對象關聯查詢
<resultMap id="rm" type="User"><id column="id" property="id"></id><!-- collection說明 :property 為User下的一對多對象, select 調用接口的方法進行查詢,column="id" 是傳入查詢的參數--><collection property="dogs" select="dogDao.getDog" column="id"></collection> </resultMap> <select id="oneToMany" resultMap="rm">select * from user </select>多對一對象關聯查詢
<resultMap id="rm" type="Dog"><id column="uid" property="uid"></id><!-- association :property 為Dog下的多對一對象 --><association property="user" select="userDao.queryUser" column="uid"></association> </resultMap> <select id="manyToOne" resultMap="rm">select * from dog </select>PageHelper
- maven引入PageHelper與jsqlparser
 - mybatis-config.xml增加Plugin配置
 - 代碼中使用PageHelper.startPage() 自動分頁
 
常用注解
- @lnsert
 - @Update
 - @Delete
 - @Select
 - @Result,對應<id> <result>,字段映射
 - @Results, 對應<resultMap>,結果映射
 - @Param,參數映射
 
Mybatis-plus
- MyBatis-Plus(簡稱MP)是一個MyBatis的增強工具
 - 自動實現Mapper CRUD操作,極致提高數據庫開發效率
 - MP在MyBatis的基礎上只做增強不做改變
 
整合三部曲:
核心注解
- @TableName -將實體類與表名映射
 - @Tableld -說明對應屬性是表的主鍵
 - @TableField -設置屬性與列名的對應關系
 
總結
以上是生活随笔為你收集整理的MyBatis【钢镚核恒】的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 字符设备驱动基础篇4——字符设备驱动读写
 - 下一篇: 服务器升级虚拟化,刀片服务器内置虚拟化