簡介
1.什么是MyBatis
MyBatis是一個優(yōu)秀的持久層框架狐蜕,它對jdbc的操作數(shù)據(jù)庫的過程進行封裝,使開發(fā)者只需要關注 SQL 本身谋国,而不需要花費精力去處理例如注冊驅動粗梭、創(chuàng)建connection艇纺、創(chuàng)建statement、手動設置參數(shù)媚污、結果集檢索等jdbc繁雜的過程代碼舀瓢。
Mybatis通過xml或注解的方式將要執(zhí)行的各種statement(statement、preparedStatemnt耗美、CallableStatement)配置起來京髓,并通過java對象和statement中的sql進行映射生成最終執(zhí)行的sql語句,最后由mybatis框架執(zhí)行sql并將結果映射成java對象并返回商架。
2,為什么需要MyBatis
MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設置以及對結果集的檢索封裝朵锣。
3.如何使用MyBatis
需要導入兩個包
1.創(chuàng)建mybatis-config.xml文件,在該文件中完成和數(shù)據(jù)庫的連接設置操作
首先需要創(chuàng)建xml文件甸私,再導入dtd文檔類型定義诚些。
寫配置文件需要安裝一定的順序。
有四種引入映射文件的方法皇型。
類路徑诬烹、本地文件路徑、接口類路徑弃鸦、包名引入绞吁。
新的方法 ?會將test.cwq.shop.model 包中的POJO類一首字母小寫的非限定類名作為別名。 ?不過唬格,Mybatis 的別名不區(qū)分大小寫家破。
2.根據(jù)數(shù)據(jù)表創(chuàng)建相應的實體類
3.創(chuàng)建mapper文件完成對實體類的映射,該文件同樣是xml文件
<SQL>元素
4.創(chuàng)建SQLSessionFactory ?根據(jù)factory獲取Session ? 直接根據(jù)Session 來執(zhí)行相應的操作
5.insert,update,delete,select
insert標簽表示添加相應的對象信息,paramterType表示添加的對象類型
update表示更新操作购岗,delete表示刪除操作 ? select表示查詢操作汰聋,可以查詢列表或者單個對象
相應的調用方式
6.xml中兩種的引用
1、#{xxx}這種方式會自動將這個值替換為PreparedStatment中?來使用喊积,如果是字符串會自動加上引號烹困,對于排序而言就無法操作
2、${xx}這種方式叫做完全替換乾吻,直接將字符串完整的替換到這個位置髓梅,完全替換的方式可能會出現(xiàn)SQL注入的安全隱患拟蜻。建議在參數(shù)中不要使用這種方式。但是如果使用在排序中沒有任何影響
update表示更新操作枯饿,delete表示刪除操作
7.也可以用annotation?
就不需要類的xml文件 只要寫一個類接口?
8.SQL動態(tài)查詢
只要test屬性為true 就會執(zhí)行元素中的條件
9.constructor
MyBatis使用參數(shù)類型來標記構造器酝锅,將結果注入構造器。Java無法通過發(fā)射獲取參數(shù)名稱奢方,所以在創(chuàng)建constructor元素時搔扁,要確保參數(shù)按順序傳遞、并且指定正確的參數(shù)類型袱巨。
注意事項(如果問題向mybatis官網(wǎng)找答案。)
1.注意不同的xml類型的文件 dtd 不同碳抄。
2.configuration配置文件的節(jié)點順序是不能改變的愉老。
3.${}和#{}的區(qū)別
${} 無法防止注入問題。
4.collection和association的區(qū)別
api解釋
Mybatis處理“一對多”的關系時剖效,需要用到associasion元素嫉入。處理”多對一“用collection元素來實現(xiàn)(這兩個元素在之前mapper文件中提到過)。
association的用法璧尸。
主鍵關聯(lián)咒林。一對一關系,通過主鍵查詢一個結果集爷光,將結果集封裝成addressMap垫竞。而只能用javaType=address ?沒有為什么 這是一種規(guī)定。如果是collection只能用ofType.
collection的用法
列表關聯(lián)蛀序。一對多關系欢瞪,將通過id查找一個或多個結果集。將結果集封裝成userMap徐裸。而數(shù)據(jù)類型只能用 ofType表示遣鼓。