版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3第三章
MyBatis核心組件-掌握MyBatis核心組件及其作用-掌握利用SqlSession實(shí)現(xiàn)增刪改查操作的方法-掌握SQLMapper映射器的原理、配置與使用方法010203項(xiàng)目需求背景知識(shí)項(xiàng)目實(shí)現(xiàn)經(jīng)典問題強(qiáng)化本章小結(jié)0102030405E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項(xiàng)目需求01項(xiàng)目需求01項(xiàng)目經(jīng)理老王:小王,項(xiàng)目中的產(chǎn)品模塊完成的怎么樣了?程序員小王:已經(jīng)完成了產(chǎn)品模塊的顯示列表功能,正在設(shè)計(jì)和實(shí)現(xiàn)產(chǎn)品創(chuàng)建功能,這里需要深入理解MyBatis的核心組件,包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、SQLMapper等內(nèi)容,我對(duì)這些還不是很清楚,需要深入思考來消化知識(shí)點(diǎn)。項(xiàng)目經(jīng)理老王:好的,在這里特別要注意下SqlSession的工作原理及使用方法,以及SQLMapper中的各種標(biāo)簽的配置,只有搞清楚這些才能在項(xiàng)目中靈活運(yùn)用MyBatis。程序員小王:收到,一定按時(shí)保質(zhì)完成任務(wù),不耽誤項(xiàng)目進(jìn)度。功能描述01創(chuàng)建新產(chǎn)品:填寫產(chǎn)品的相關(guān)信息,比如產(chǎn)品編號(hào)、產(chǎn)品名稱、產(chǎn)品價(jià)格等,進(jìn)行保存,并且可以在創(chuàng)建新產(chǎn)品時(shí)設(shè)置產(chǎn)品狀態(tài),默認(rèn)產(chǎn)品狀態(tài)為關(guān)閉。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3背景知識(shí)02知識(shí)導(dǎo)圖02學(xué)習(xí)并掌握Mybatis,就要深入理解Mybatis的核心組件。Mybatis四大核心組件是:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、SQLMapper。MyBatis核心組件02這四個(gè)組件是前后依賴關(guān)系,SqlSessionFactory是SqlSessionFactoryBuilder通過build方法創(chuàng)建的,而SqlSession是SqlSessionFactory生產(chǎn)的,SqlSession對(duì)象又通過加載SQLMapper執(zhí)行SQL語句,完成數(shù)據(jù)庫的操作SqlSessionFactoryBuilder02作為Mybatis的核心組件之一,它直接翻譯為中文是SQL會(huì)話工廠建造者,也有人管它叫作MyBatis的構(gòu)造器。作用是根據(jù)配置信息或者代碼來生成SqlSessionFactory。SqlSessionFactoryBuilder對(duì)象在創(chuàng)建完工廠對(duì)象后,就完成了其使命,即可被銷毀。所以,一般會(huì)將該對(duì)象創(chuàng)建為一個(gè)方法內(nèi)的局部對(duì)象,方法結(jié)束,對(duì)象銷毀。SqlSessionFactoryBuilder有五個(gè)build()方法,每一種都允許從不同的資源中創(chuàng)建一個(gè)SqlSessionFactory實(shí)例。SqlSessionFactorybuild(InputStreaminputstream)SqlSessionFactorybuild(InputStreaminputstream,Stringenvironment)SqlSessionFactorybuild(InputStreaminputStream,Propertiesproperties)SqlSessionFactorybuild(InputStreaminputStream,Stringenv,Propertiesprops)SqlSessionFactorybuild(Configurationconfig)SqlSessionFactory02SqlSessionFactory直接翻譯為SQL會(huì)話工廠,它是一個(gè)接口,用于創(chuàng)建SqlSession的實(shí)例。簡單來講,SqlSessionFactory是MyBatis的關(guān)鍵對(duì)象,它是單個(gè)數(shù)據(jù)庫映射關(guān)系經(jīng)過編譯后的內(nèi)存鏡像。SqlSessionFactory的實(shí)例是MyBatis應(yīng)用的中心,它唯一的作用就是生產(chǎn)MyBatis的核心接口對(duì)象SqlSession,它的責(zé)任是明確的、唯一的。所以,我們往往會(huì)采用單例模式處理它。SqlSessionFactory提供了六個(gè)方法創(chuàng)建SqlSession實(shí)例SqlSessionopensession()Sqlsessionopensession(booleanautocommit)SqlSessionopensession(connectionconnection)Sqlsessionopensession(TransactionIsolationLevellevel)SqlSessionopenSession(ExecutorTypeexecType,TransactionIsolationLevellevel)SqlSessionopensession(ExecutorTypeexecType)SqlSessionopensession(ExecutorTypeexecType,booleanautocommit)SqlSessionopensession(ExecutorTypeexecType,Connectionconnection)Confiaurationgetconfiouration():SqlSession接口02
Mybatis是通過SqlSession來實(shí)現(xiàn)與數(shù)據(jù)庫會(huì)話的,相當(dāng)于JDBC中的一個(gè)Connection對(duì)象,是整個(gè)Mybatis運(yùn)行的核心。SqlSession接口提供了查詢,插入,更新,刪除等方法,Mybatis中所有的數(shù)據(jù)庫交互都由SqlSession來完成。一個(gè)SqlSession對(duì)應(yīng)著一次數(shù)據(jù)庫會(huì)話,一次會(huì)話以SqlSession對(duì)象的創(chuàng)建開始,以SqlSession對(duì)象的關(guān)閉結(jié)束。SqlSession簡單的工作流程如下:SqlSession接口02SqlSession是MyBatis的核心接口,主要負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行交互,它提供了語句執(zhí)行、批量更新、事務(wù)控制、本地緩存、對(duì)象關(guān)閉等五類二十余種方法<T>Tselectone(stringstatement,0bjectparameter)<E>ListE>selectList(Stringstatement,objectparameter)<K,V>Map<K,V>selectMap(Stringstatement,Objectparameter,stringmapKey)intinsert(Stringstatement,0bjectparameter)intupdate(Stringstatement,objectparameter)intdelete(Stringstatement,objectparameter)<E>List<E>selectList(Stringstatement,0bjectparameter,RowBoundsrowBounds)<K,V>Map<,>selectNap(Stringstatement,Objectparameter,StringmapKey,RowBoundsrowoounds)voidselect(Stringstatement,Objectparameter,ResultHandler<T>handler)voidselect(Stringstatement,Objectparameter,RowBoundsowBounds,ResultHandlerThandler)SQLMapper相關(guān)概念02SQLMapper(映射器)是MyBatis中最重要的組件之一,它主要作用是將Java類與數(shù)據(jù)庫中的SQL語句進(jìn)行映射,從而實(shí)現(xiàn)數(shù)據(jù)的持久化操作。下面是SQLMapper相關(guān)的一些概念:①XML映射器:XML映射器是MyBatis中一組數(shù)據(jù)庫映射文件,里面定義了對(duì)業(yè)務(wù)操作相關(guān)的各種SQL語句(如SELECT、INSERT、UPDATE和DELETE等)以及如何將查詢結(jié)果映射為Java對(duì)象的規(guī)則。②接口映射器:除了XML映射器外,MyBatis還允許定義Java接口作為映射器。這些接口的方法名與XML文件中映射標(biāo)簽的ID屬性值一致,以便可以像調(diào)用Java方法一樣執(zhí)行SQL語句。③結(jié)果映射:在XML映射文件中,可以定義結(jié)果映射,用于指定如何將SQL查詢結(jié)果的列映射到Java對(duì)象的屬性值上。④動(dòng)態(tài)SQL:SQLMapper支持動(dòng)態(tài)SQL,它可以根據(jù)傳入的參數(shù)動(dòng)態(tài)生成SQL語句。MyBatis提供了一系列的XML標(biāo)簽(如<if>,<choose>,<foreach>等)來支持這種功能。⑤類型處理器:MyBatis允許自定義類型處理器,它以特定的方式處理Java對(duì)象和SQL數(shù)據(jù)類型之間的映射關(guān)系。SQLMapper元素標(biāo)簽02SQLMapper映射器既可以使用注解也可以使用XML定義,但是注解的方式在企業(yè)級(jí)應(yīng)用中較少,這是因?yàn)樵诿鎸?duì)復(fù)雜的SQL語句時(shí),注解會(huì)顯得很無力。因此我們重點(diǎn)學(xué)習(xí)XML的實(shí)現(xiàn)方式。映射器的XML實(shí)現(xiàn)主要通過配置相應(yīng)的標(biāo)簽來實(shí)現(xiàn)。這些標(biāo)簽用于定義SQL語句、配置結(jié)果映射規(guī)則等。元素名稱描述<select>定義一個(gè)SQL查詢語句,用于檢索數(shù)據(jù)。可以指定參數(shù)映射和結(jié)果集映射規(guī)則。<insert>定義一個(gè)SQL插入語句,用于向數(shù)據(jù)庫插入數(shù)據(jù)??梢灾付▍?shù)映射。<update>定義一個(gè)SQL更新語句,用于修改數(shù)據(jù)庫中的數(shù)據(jù)??梢灾付▍?shù)映射。<delete>定義一個(gè)SQL刪除語句,用于從數(shù)據(jù)庫中刪除數(shù)據(jù)??梢灾付▍?shù)映射。<resultType>定義結(jié)果集的映射規(guī)則,可以為映射類的全路徑,這樣MyBatis可以將結(jié)果集映射成對(duì)應(yīng)JavaBean;也可以為int、double、float等基本類型參數(shù);還可以使用別名,但要符合別名命名規(guī)范,且不能與resultMap同時(shí)使用。<resultMap>定義結(jié)果集的映射規(guī)則,將數(shù)據(jù)庫查詢結(jié)果映射到Java對(duì)象??梢灾付械綄傩缘挠成?。<sql>定義可重用的SQL代碼片段,用于減少重復(fù)的SQL代碼。<include>引入先前定義的SQL片段,提高XML配置的可讀性和可維護(hù)性。<typeAlias>為Java類型設(shè)置短的別名,以簡化XML配置中的類型引用。SQLMapper開發(fā)02XML方式實(shí)現(xiàn)映射器主要分為Mapper接口定義、Mapper映射文件配置、編寫SQL映射語句、編寫結(jié)果映射、Mapper接口注冊(cè)、映射器調(diào)用等環(huán)節(jié),下面以一個(gè)User對(duì)象的增刪改查操作為例詳細(xì)講解映射器的配置和使用方法packagecom.example.mapper;importcom.example.model.User;publicinterfaceUserMapper{UserselectUser(intid);intinsertUser(Useruser);intupdateUser(Useruser);intdeleteUser(intid);}SQLMapper開發(fā)02
在<mapper>標(biāo)簽中,可以定義與數(shù)據(jù)庫操作相關(guān)的SQL映射語句,如<select>、<insert>、<update>、<delete>等,例如下面映射文件中就包含了對(duì)User對(duì)象的增刪改查操作,如代碼如下:<mappernamespace="com.example.mapper.UserMapper"><selectid="selectUser"resultType="com.example.model.User">SELECT*FROMusersWHEREid=#{id}</select><insertid="insertUser">INSERTINTOusers(name,age)VALUES(#{name},#{age})</insert><updateid="updateUser">UPDATEusersSETname=#{name},age=#{age}WHEREid=#{id}</update><deleteid="deleteUser">DELETEFROMusersWHEREid=#{id}</delete></mapper>SQLMapper開發(fā)02編寫結(jié)果映射:可以使用<resultType>或<resultMap>標(biāo)簽進(jìn)行結(jié)果集映射<resultMapid="userResultMap"type="com.example.model.User"><idproperty="id"column="user_id"/><resultproperty="name"column="user_name"/><resultproperty="age"column="user_age"/></resultMap><selectid="selectUserWithResultMap"resultMap="userResultMap">SELECT*FROMusersWHEREid=#{id}</select>SQLMapper開發(fā)02Mapper接口注冊(cè):在MyBatis核心配置文件中對(duì)Mapper接口(UserMapper.java)進(jìn)行注冊(cè)<configuration><mappers><mapperclass="com.example.mapper.UserMapper"/></mappers></configuration>映射器調(diào)用02
映射器調(diào)用:首先需要獲取SqlSession對(duì)象,然后通過getMapper方法獲取Mapper接口實(shí)例,最后調(diào)用對(duì)應(yīng)的成員方法完成數(shù)據(jù)庫操作try(SqlSessionsqlSession=sqlSessionFactory.openSession()){UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);Useruser=userMapper.selectUser(1);}E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項(xiàng)目實(shí)現(xiàn)03業(yè)務(wù)場(chǎng)景03業(yè)務(wù)場(chǎng)景描述:項(xiàng)目經(jīng)理老王:小王,我想了解一下你在MyBatis核心技術(shù)方面的掌握情況,能否詳細(xì)介紹一下你學(xué)到了哪些內(nèi)容?程序員小王:當(dāng)然可以。我利用周末的時(shí)間將MyBatis的核心內(nèi)容進(jìn)行了深入的學(xué)習(xí),掌握了MyBatis的四大核心組件SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、SQLMapper的功能、原理及使用方法,現(xiàn)在有信心利用所學(xué)知識(shí),實(shí)現(xiàn)產(chǎn)品模塊中的新建產(chǎn)品功能。項(xiàng)目經(jīng)理老王:好的,期待你的表現(xiàn)。數(shù)據(jù)庫設(shè)計(jì)03列名列類型描述idint主鍵productNumvarchar(50)產(chǎn)品編號(hào)productNamevarchar(50)產(chǎn)品名稱cityNamevarchar(50)城市名稱DepartureTimedate時(shí)間productPricedouble(11,0)價(jià)格productDescvarchar(250)產(chǎn)品描述productStatusint產(chǎn)品狀態(tài)產(chǎn)品信息表設(shè)計(jì)創(chuàng)建包、接口和對(duì)應(yīng)的XML文件03
因?yàn)榈诙轮幸呀?jīng)實(shí)現(xiàn)了產(chǎn)品查詢功能,因此本章將在該項(xiàng)目的基礎(chǔ)上繼續(xù)實(shí)現(xiàn)“新建產(chǎn)品”功能。
項(xiàng)目在duct包下新增mapper目錄,用于存放訪問數(shù)據(jù)庫的接口和映射文件,其中ProductMapper.java是產(chǎn)品數(shù)據(jù)訪問的Mapper接口,里面定義了新增產(chǎn)品的方法。ProductMapper.xml是產(chǎn)品的映射文件,里面定義了插入產(chǎn)品信息的SQL語句。代碼實(shí)現(xiàn)031.實(shí)現(xiàn)ProductMapper.java、ProductMapper.xml2.編輯mybatis-config.xml配置文件3.實(shí)現(xiàn)AppTest測(cè)試產(chǎn)品信息的創(chuàng)建功能03測(cè)試類的功能是完成產(chǎn)品創(chuàng)建@Testpublicvoidtest(){//獲取sqlSession對(duì)象SqlSessionsqlSession=MybatisUtils.getSqlSession();//獲取Mapper對(duì)象ProductMapperuserdao=sqlSession.getMapper(ProductMapper.class);ProductBeanproductBean=newProductBean();productBean.setProductName("長城一日游");
。。。。。//執(zhí)行插入操作intcount=userdao.insertProduct(productBean);System.out.println(count);//提交更新
sqlSmit();
//關(guān)閉sqlSession對(duì)象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年期貨物償債交易具體合同版
- 2024年標(biāo)準(zhǔn)競(jìng)業(yè)限制及知識(shí)產(chǎn)權(quán)保密協(xié)議版B版
- 2024年版權(quán)許可合同:音樂作品版權(quán)使用與授權(quán)
- 2025年咸寧貨運(yùn)從業(yè)資格證考試題目庫存答案
- 2024年度國際物流運(yùn)輸網(wǎng)絡(luò)保密及優(yōu)化升級(jí)合同3篇
- 單位人事管理制度集錦匯編
- 鋼鐵制品采購?fù)稑?biāo)技巧
- 2025民間借款合同格式范文
- 城市垃圾處理施工合同包工頭
- 2024塔式起重機(jī)購置、租賃及安全管理規(guī)范合同3篇
- 開題報(bào)告:職普融通與職業(yè)教育高質(zhì)量發(fā)展:從國際經(jīng)驗(yàn)到中國路徑創(chuàng)新
- 九年級(jí)上冊(cè)人教版數(shù)學(xué)期末綜合知識(shí)模擬試卷(含答案)
- 商標(biāo)出租合同范例
- 重大版小英小學(xué)六年級(jí)上期期末測(cè)試
- 會(huì)計(jì)助理個(gè)人年終工作總結(jié)
- 鋼鐵廠電工知識(shí)安全培訓(xùn)
- 2024年山東省菏澤市中考?xì)v史試卷
- 說明文方法和作用說明文語言準(zhǔn)確性中國石拱橋公開課獲獎(jiǎng)?wù)n件省賽課一等獎(jiǎng)?wù)n件
- 中南運(yùn)控課設(shè)-四輥可逆冷軋機(jī)的卷取機(jī)直流調(diào)速系統(tǒng)設(shè)計(jì)
- 酒店建設(shè)投標(biāo)書
- 《基于javaweb的網(wǎng)上書店系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》
評(píng)論
0/150
提交評(píng)論