mybatis第一天課堂筆記_第1頁
mybatis第一天課堂筆記_第2頁
mybatis第一天課堂筆記_第3頁
mybatis第一天課堂筆記_第4頁
mybatis第一天課堂筆記_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——mybatis第一天課堂筆記mybatis第一天mybatis的基礎(chǔ)知識

課程安排:

mybatis和springmvc通過訂單商品案例驅(qū)動

第一天:基礎(chǔ)知識(重點,內(nèi)容量多)對原生態(tài)jdbc程序(單獨使用jdbc開發(fā))問題總結(jié)mybatis框架原理(把握)mybatis入門程序用戶的增、刪、改、查mybatis開發(fā)dao兩種方法:原始dao開發(fā)方法(程序需要編寫dao接口和dao實現(xiàn)類)(把握)mybaits的mapper接口(相當于dao接口)代理開發(fā)方法(把握)mybatis配置文件SqlMapConfig.xmlmybatis核心:mybatis輸入映射(把握)mybatis輸出映射(把握)mybatis的動態(tài)sql(把握)

其次天:高級知識訂單商品數(shù)據(jù)模型分析高級結(jié)果集映射(一對一、一對多、多對多)mybatis延遲加載mybatis查詢緩存(一級緩存、二級緩存)mybaits和spring進行整合(把握)mybatis逆向工程

1對原生態(tài)jdbc程序中問題總結(jié)

1.1環(huán)境

java環(huán)境:jdk1.7.0_72eclipse:indigomysql:5.1

1.2創(chuàng)立mysql數(shù)據(jù)

導入下邊的腳本:

sql_table.sql:記錄表結(jié)構(gòu)

sql_data.sql:記錄測試數(shù)據(jù),在實際企業(yè)開發(fā)中,最終提供一個初始化數(shù)據(jù)腳本

1.3jdbc程序

使用jdbc查詢mysql數(shù)據(jù)庫中用戶表的記錄。

創(chuàng)立java工程,參與jar包:

數(shù)據(jù)庫驅(qū)動包(mysql5.1)

上邊的是mysql驅(qū)動。下邊的是oracle的驅(qū)動。

程序代碼:

1.4問題總結(jié)

1、數(shù)據(jù)庫連接,使用時就創(chuàng)立,不使用馬上釋放,對數(shù)據(jù)庫進行頻繁連接開啟和關(guān)閉,造成數(shù)據(jù)庫資源浪費,影響數(shù)據(jù)庫性能。

設(shè)想:使用數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接。

2、將sql語句硬編碼到j(luò)ava代碼中,假使sql語句修改,需要重新編譯java代碼,不利于系統(tǒng)維護。設(shè)想:將sql語句配置在xml配置文件中,即使sql變化,不需要對java代碼進行重新編譯。

3、向preparedStatement中設(shè)置參數(shù),對占位符號位置和設(shè)置參數(shù)值,硬編碼在java代碼中,不利于系統(tǒng)維護。設(shè)想:將sql語句及占位符號和參數(shù)全部配置在xml中。

4、從resutSet中遍歷結(jié)果集數(shù)據(jù)時,存在硬編碼,將獲取表的字段進行硬編碼,,不利于系統(tǒng)維護。設(shè)想:將查詢的結(jié)果集,自動映射成java對象。

2mybatis框架

2.1mybatis是什么?

mybatis是一個持久層的框架,是apache下的頂級項目。

mybatis托管到goolecode下,再后來托管到github下(/mybatis/mybatis-3/releases)。

mybatis讓程序?qū)⒅饕Ψ旁趕ql上,通過mybatis提供的映射方式,自由靈活生成(半自動化,大部分需要程序員編寫sql)滿足需要sql語句。

mybatis可以將向preparedStatement中的輸入?yún)?shù)自動進行輸入映射,將查詢結(jié)果集靈活映射成java對象。(輸出映射)

2.2mybatis框架

SqlMapConfig.xml(是mybatis的全局配置文件,名稱不固定的)配置了數(shù)據(jù)源、事務(wù)等mybatis運行環(huán)境配置映射文件(配置sql語句)mapper.xml(映射文件)、mapper.xml、mapper.xmlSqlSessionFactory(會話工廠),根據(jù)配置文件創(chuàng)立工廠作用:創(chuàng)立SqlSessionSqlSession(會話),是一個接口,面向用戶(程序員)的接口作用:操作數(shù)據(jù)庫(發(fā)出sql增、刪、改、查)輸入?yún)?shù)類型java簡單類型hashmappojo自定義Executor(執(zhí)行器),是一個接口(基本執(zhí)行器、緩存執(zhí)行器)作用:SqlSession內(nèi)部通過執(zhí)行器操作數(shù)據(jù)庫輸出結(jié)果類型java簡單類型hashmappojo自定義mappedstatement(底層封裝對象)作用:對操作數(shù)據(jù)庫存儲封裝,包括sql語句,輸入?yún)?shù)、輸出結(jié)果類型msyql

3入門程序

3.1需求

根據(jù)用戶id(主鍵)查詢用戶信息根據(jù)用戶名稱模糊查詢用戶信息添加用戶刪除用戶更新用戶

3.1環(huán)境

java環(huán)境:jdk1.7.0_72eclipse:indigomysql:5.1

mybatis運行環(huán)境(jar包):

從/mybatis/mybatis-3/releases下載,3.2.7版本

lib下:依靠包

mybatis-3.2.7.jar:核心包mybatis-3.2.7.pdf,操作指南

參與mysql的驅(qū)動包

3.2perties

insertintouser(id,username,birthday,sex,address)value(#{id},#{username},#{birthday},#{sex},#{address})

3.8刪除用戶3.8.1映射文件

3.8.2代碼:

3.9更新用戶3.9.1映射文件

3.9.2代碼

3.10總結(jié)

3.10.1parameterType

在映射文件中通過parameterType指定輸入?yún)?shù)的類型。

3.10.2resultType

在映射文件中通過resultType指定輸出結(jié)果的類型。

3.10.3#{}和${}

#{}表示一個占位符號,#{}接收輸入?yún)?shù),類型可以是簡單類型,pojo、hashmap。

假使接收簡單類型,#{}中可以寫成value或其它名稱。

#{}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。

${}表示一個拼接符號,會引用sql注入,所以不建議使用${}。${}接收輸入?yún)?shù),類型可以是簡單類型,pojo、hashmap。假使接收簡單類型,${}中只能寫成value。

${}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。

3.10.4selectOne和selectList

selectOne表示查詢出一條記錄進行映射。假使使用selectOne可以實現(xiàn)使用selectList也可以實現(xiàn)(list中只有一個對象)。

selectList表示查詢出一個列表(多條記錄)進行映射。假使使用selectList查詢多條記錄,不能使用selectOne。

假使使用selectOne報錯:

org.apache.ibatis.exceptions.TooManyResultsException:Expectedoneresult(ornull)tobereturnedbyselectOne(),butfound:4

3.11mybatis和hibernate本質(zhì)區(qū)別和應(yīng)用場景

hibernate:是一個標準ORM框架(對象關(guān)系映射)。入門門檻較高的,不需要程序?qū)憇ql,sql語句自動生成了。對sql語句進行優(yōu)化、修改比較困難的。應(yīng)用場景:適用與需求變化不多的中小型項目,譬如:后臺管理系統(tǒng),erp、orm、oa。。

mybatis:專注是sql本身,需要程序員自己編寫sql語句,sql修改、優(yōu)化比較便利。mybatis是一個不完全的ORM框架,雖然程序員自己寫sql,mybatis也可以實現(xiàn)映射(輸入映射、輸出映射)。應(yīng)用場景:適用與需求變化較多的項目,譬如:互聯(lián)網(wǎng)項目。

企業(yè)進行技術(shù)選型,以低成本高回報作為技術(shù)選型的原則,根據(jù)項目組的技術(shù)力量進行選擇。

4mybatis開發(fā)dao的方法

4.1SqlSession使用范圍

4.1.1SqlSessionFactoryBuilder

通過SqlSessionFactoryBuilder創(chuàng)立會話工廠SqlSessionFactory

將SqlSessionFactoryBuilder當成一個工具類使用即可,不需要使用單例管理SqlSessionFactoryBuilder。在需要創(chuàng)立SqlSessionFactory時候,只需要new一次SqlSessionFactoryBuilder即可。

4.1.2SqlSessionFactory

通過SqlSessionFactory創(chuàng)立SqlSession,使用單例模式管理sqlSessionFactory(工廠一旦創(chuàng)立,使用一個實例)。

將來mybatis和spring整合后,使用單例模式管理sqlSessionFactory。

4.1.3SqlSession

SqlSession是一個面向用戶(程序員)的接口。

SqlTimestampTypeHandlerSqlDateTypeHandlerSqlTimeTypeHandlerObjectTypeHandlerEnumTypeHandlerTimestamp(java.sql)Date(java.sql)Time(java.sql)任意

Enumeration類型

TIMESTAMP類型DATE類型TIME類型

其他或未指定類型

VARCHAR-任何兼容的字符串類型,作為代碼存儲(而不是索引)。

5.5mappers(映射配置)

5.5.1通過resource加載單個映射文件

5.5.2通過mapper接口加載單個mapper

依照上邊的規(guī)范,將mapper.java和mapper.xml放在一個目錄,且同名。

5.5.3批量加載mapper(推薦使用)

6輸入映射

通過parameterType指定輸入?yún)?shù)的類型,類型可以是簡單類型、hashmap、pojo的包裝類型。

6.1傳遞pojo的包裝對象6.1.1需求

完成用戶信息的綜合查詢,需要傳入查詢條件很繁雜(可能包括用戶信息、其它信息,譬如商品、訂單的)

6.1.2定義包裝類型pojo

針對上邊需求,建議使用自定義的包裝類型的pojo。在包裝類型的pojo中將繁雜的查詢條件包裝進去。

6.1.3mapper.xml

在UserMapper.xml中定義用戶信息綜合查詢(查詢條件繁雜,通過高級查詢進行繁雜關(guān)聯(lián)查詢)。

6.1.4mapper.java

6.1.5測試代碼

7輸出映射

7.1resultType

使用resultType進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才可以映射成功。假使查詢出來的列名和pojo中的屬性名全部不一致,沒有創(chuàng)立pojo對象。只要查詢出來的列名和pojo中的屬性有一個一致,就會創(chuàng)立pojo對象。

7.1.1輸出簡單類型

需求

用戶信息的綜合查詢列表總數(shù),通過查詢總數(shù)和上邊用戶綜合查詢列表才可以實現(xiàn)分頁。

mapper.xml

mapper.java

測試代碼

小結(jié)

查詢出來的結(jié)果集只有一行且一列,可以使用簡單類型進行輸出映射。

7.1.2輸出pojo對象和pojo列表

不管是輸出的pojo單個對象還是一個列表(list中包括pojo),在mapper.xml中resultType指定的類型是一樣的。在mapper.java指定的方法返回值類型不一樣:1、輸出單個pojo對象,方法返回值是單個對象類型

2、輸出pojo對象list,方法返回值是List

生成的動態(tài)代理對象中是根據(jù)mapper方法的返回值類型確定是調(diào)用selectOne(返回單個對象調(diào)用)還是selectList(返回集合對象調(diào)用).

7.2resultMap

mybatis中使用resultMap完成高級輸出結(jié)果映射。

7.2.1resultMap使用方法

假使查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關(guān)系。

1、定義resultMap

2、使用resultMap作為statement的輸出映射類型

7.2.2將下邊的sql使用User完成映射

SELECTidid_,usernameusername_FROMUSERWHEREid=#{value}

User類中屬性名和上邊查詢列名不一致。

定義reusltMap

使用resultMap作為statement的輸出映射類型

mapper.java

測試

7.3小結(jié)

使用resultType進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才可以映射成功。假使查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關(guān)系。

8動態(tài)sql

8.1什么是動態(tài)sql

mybatis核心對sql語句進行靈活操作,通過表達式進行判斷,對sql進行靈活拼接、組裝。

8.2需求

用戶信息綜合查詢列表和用戶信息查詢列表總數(shù)這兩個statement的定義使用動態(tài)sql。

對查詢條件進行判斷,假使輸入?yún)?shù)不為空才進行查詢條件拼接。

8.3mapper.xml

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論