Mybatis常見語法與問題

一、什麼是Mybatis

1、Mybatis是一個半ORM(對象關係映射)框架,它內部封裝了JDBC,開發時只需要關注SQL語句本身,不需要花費精力去處理加載驅動、創建連接、創建statement語句等繁雜的過程。程序員直接編寫原生態的sql,可以嚴格控制sql執行性能,靈活度高。

2、Mybatis可以使用XML或註釋來配置和映射原生信息,將POJO映射成數據庫中的記錄,避免了幾乎所有的JDBC代碼和手動設置參數以及獲取結果集

3、通過xml文件或註解的方式將要執行的各種statement配置起來,並通過java對象和statement中sql的動態參數進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射爲java對象並返回,(從執行sql到返回result的過程)


二、Mybatis的優點

1、基於SQL語句變成,相當靈活,不會對應用程序或者數據庫的現有設計造成任何影響,SQL寫在XML裏,解除sql與程序代碼的耦合,便於統一管理,提供XML變遷,支持編寫動態SQL語句,並可重用

2、與JDBC相比,減少了50%以上的代碼量,消除了JDBC大量冗餘的帶啊,不需要手動開關連接

3、很好的與各種數據庫兼容(因爲Mybaits使用JDBC來連接數據庫,所以只要JDBC支持的數據庫,Mybatis都支持)

4、能夠與Spring很好的集成

5、提供映射標籤,支持對象與數據庫的ORM字段關係映射,提供對象關係映射標籤,支持對象關係組件維護


三、Mybaits的缺點

1、SQL語句的編寫工作量大,尤其當字段多,關聯表多時,對開發人員編寫SQL語句的功底有一定的要求

2、SQL語句依賴於數據庫,導致數據庫移植性很差,不能隨意更換數據庫


四、#{}和${}的區別是什麼

#{}是預編譯處理,${}是字符串替換

Mybatis在處理#{}時,會將sql中的#{}替換成?號,調用PerparedStatement的set()方法來賦值

Mybatis在處理${}時,就是把${}替換成變量的值

使用#{}可以有效的防止SQL注入,提供系統的安全性


五、當實體類中的屬性名和表中的字段名不一樣,怎麼辦?

1、通過在查詢sql語句中定義字段名的別名,讓字段名別名和實體類的屬性名一致

2、通過<resultMap>來映射字段名和實體類屬性名的一一對應關係


六、通常一個XML映射文件,都會寫一個Dao接口與之對應,請問,這個Dao接口的工作原理是什麼?Dao接口裏的方法,參數不同時,方法能重載嗎?

Dao接口即Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中Mapper的statement的id值,接口方法內的參數,就是傳遞給sql的參數

Mapper接口是沒有實現類的,當調用接口方法時,接口全限名+方法名破解字符串作爲key值,可以唯一定位一個MapperStatement,在Mybaits中,每一個<select>,<update>,<insert>,<delete>標籤,都會被解析爲一個MapperStatement對象

Mapper接口裏的方法,是不能夠重載的,因爲是使用全限名+方法名的白村和尋找策略,Mapper接口的工作原理是JDK動態代理,Mybaits運行時會使用代理對象proxy,代理對象會攔截接口方法,轉而執行MapperStatement所代表的sql,然後將sql執行結果返回


七、Mybatis有哪些動態sql,執行原理是什麼

執行原理是根據表達式的值,完成邏輯判斷並倒臺破解sql的功能

Mybatis提供了9中動態sql標籤:trim|where|set|foreach|if|choose|when|otherwise|bind


八、Myabtis有哪些標籤

<select>|<insert>|<update>|<delete>|<resuleMap>|<resultType>|<sql>|<include>|<selectKey>|<parameterMap>


九、Mybatis的xml映射文件中,不同的xml映射文件,id是否可以重複

不同的xml映射文件,不過配置了namespace,那麼id可以重複,反之,則不可以


十、Mybatis的一級、二級緩存

1、一級緩存:作用域爲session,當session flush或者close之後,該session中的所有cache就將清空,默認開啓一級緩存

2、二集緩存:作用域爲mapper(namespace),使用二級緩存屬性類需要實現Serializable序列化接口(用於保存對象狀態),可在它的映射文件中配置<cache/>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章