版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3第三章
MyBatis核心組件-掌握MyBatis核心組件及其作用-掌握利用SqlSession實現(xiàn)增刪改查操作的方法-掌握SQLMapper映射器的原理、配置與使用方法010203項目需求背景知識項目實現(xiàn)經(jīng)典問題強(qiáng)化本章小結(jié)0102030405E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項目需求01項目需求01項目經(jīng)理老王:小王,項目中的產(chǎn)品模塊完成的怎么樣了?程序員小王:已經(jīng)完成了產(chǎn)品模塊的顯示列表功能,正在設(shè)計和實現(xiàn)產(chǎn)品創(chuàng)建功能,這里需要深入理解MyBatis的核心組件,包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、SQLMapper等內(nèi)容,我對這些還不是很清楚,需要深入思考來消化知識點(diǎn)。項目經(jīng)理老王:好的,在這里特別要注意下SqlSession的工作原理及使用方法,以及SQLMapper中的各種標(biāo)簽的配置,只有搞清楚這些才能在項目中靈活運(yùn)用MyBatis。程序員小王:收到,一定按時保質(zhì)完成任務(wù),不耽誤項目進(jìn)度。功能描述01創(chuàng)建新產(chǎn)品:填寫產(chǎn)品的相關(guān)信息,比如產(chǎn)品編號、產(chǎn)品名稱、產(chǎn)品價格等,進(jìn)行保存,并且可以在創(chuàng)建新產(chǎn)品時設(shè)置產(chǎn)品狀態(tài),默認(rèn)產(chǎn)品狀態(tài)為關(guān)閉。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3背景知識02知識導(dǎo)圖02學(xué)習(xí)并掌握Mybatis,就要深入理解Mybatis的核心組件。Mybatis四大核心組件是:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、SQLMapper。MyBatis核心組件02這四個組件是前后依賴關(guān)系,SqlSessionFactory是SqlSessionFactoryBuilder通過build方法創(chuàng)建的,而SqlSession是SqlSessionFactory生產(chǎn)的,SqlSession對象又通過加載SQLMapper執(zhí)行SQL語句,完成數(shù)據(jù)庫的操作SqlSessionFactoryBuilder02作為Mybatis的核心組件之一,它直接翻譯為中文是SQL會話工廠建造者,也有人管它叫作MyBatis的構(gòu)造器。作用是根據(jù)配置信息或者代碼來生成SqlSessionFactory。SqlSessionFactoryBuilder對象在創(chuàng)建完工廠對象后,就完成了其使命,即可被銷毀。所以,一般會將該對象創(chuàng)建為一個方法內(nèi)的局部對象,方法結(jié)束,對象銷毀。SqlSessionFactoryBuilder有五個build()方法,每一種都允許從不同的資源中創(chuàng)建一個SqlSessionFactory實例。SqlSessionFactorybuild(InputStreaminputstream)SqlSessionFactorybuild(InputStreaminputstream,Stringenvironment)SqlSessionFactorybuild(InputStreaminputStream,Propertiesproperties)SqlSessionFactorybuild(InputStreaminputStream,Stringenv,Propertiesprops)SqlSessionFactorybuild(Configurationconfig)SqlSessionFactory02SqlSessionFactory直接翻譯為SQL會話工廠,它是一個接口,用于創(chuàng)建SqlSession的實例。簡單來講,SqlSessionFactory是MyBatis的關(guān)鍵對象,它是單個數(shù)據(jù)庫映射關(guān)系經(jīng)過編譯后的內(nèi)存鏡像。SqlSessionFactory的實例是MyBatis應(yīng)用的中心,它唯一的作用就是生產(chǎn)MyBatis的核心接口對象SqlSession,它的責(zé)任是明確的、唯一的。所以,我們往往會采用單例模式處理它。SqlSessionFactory提供了六個方法創(chuàng)建SqlSession實例SqlSessionopensession()Sqlsessionopensession(booleanautocommit)SqlSessionopensession(connectionconnection)Sqlsessionopensession(TransactionIsolationLevellevel)SqlSessionopenSession(ExecutorTypeexecType,TransactionIsolationLevellevel)SqlSessionopensession(ExecutorTypeexecType)SqlSessionopensession(ExecutorTypeexecType,booleanautocommit)SqlSessionopensession(ExecutorTypeexecType,Connectionconnection)Confiaurationgetconfiouration():SqlSession接口02
Mybatis是通過SqlSession來實現(xiàn)與數(shù)據(jù)庫會話的,相當(dāng)于JDBC中的一個Connection對象,是整個Mybatis運(yùn)行的核心。SqlSession接口提供了查詢,插入,更新,刪除等方法,Mybatis中所有的數(shù)據(jù)庫交互都由SqlSession來完成。一個SqlSession對應(yīng)著一次數(shù)據(jù)庫會話,一次會話以SqlSession對象的創(chuàng)建開始,以SqlSession對象的關(guān)閉結(jié)束。SqlSession簡單的工作流程如下:SqlSession接口02SqlSession是MyBatis的核心接口,主要負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行交互,它提供了語句執(zhí)行、批量更新、事務(wù)控制、本地緩存、對象關(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)行映射,從而實現(xiàn)數(shù)據(jù)的持久化操作。下面是SQLMapper相關(guān)的一些概念:①XML映射器:XML映射器是MyBatis中一組數(shù)據(jù)庫映射文件,里面定義了對業(yè)務(wù)操作相關(guān)的各種SQL語句(如SELECT、INSERT、UPDATE和DELETE等)以及如何將查詢結(jié)果映射為Java對象的規(guī)則。②接口映射器:除了XML映射器外,MyBatis還允許定義Java接口作為映射器。這些接口的方法名與XML文件中映射標(biāo)簽的ID屬性值一致,以便可以像調(diào)用Java方法一樣執(zhí)行SQL語句。③結(jié)果映射:在XML映射文件中,可以定義結(jié)果映射,用于指定如何將SQL查詢結(jié)果的列映射到Java對象的屬性值上。④動態(tài)SQL:SQLMapper支持動態(tài)SQL,它可以根據(jù)傳入的參數(shù)動態(tài)生成SQL語句。MyBatis提供了一系列的XML標(biāo)簽(如<if>,<choose>,<foreach>等)來支持這種功能。⑤類型處理器:MyBatis允許自定義類型處理器,它以特定的方式處理Java對象和SQL數(shù)據(jù)類型之間的映射關(guān)系。SQLMapper元素標(biāo)簽02SQLMapper映射器既可以使用注解也可以使用XML定義,但是注解的方式在企業(yè)級應(yīng)用中較少,這是因為在面對復(fù)雜的SQL語句時,注解會顯得很無力。因此我們重點(diǎn)學(xué)習(xí)XML的實現(xiàn)方式。映射器的XML實現(xiàn)主要通過配置相應(yīng)的標(biāo)簽來實現(xiàn)。這些標(biāo)簽用于定義SQL語句、配置結(jié)果映射規(guī)則等。元素名稱描述<select>定義一個SQL查詢語句,用于檢索數(shù)據(jù)??梢灾付▍?shù)映射和結(jié)果集映射規(guī)則。<insert>定義一個SQL插入語句,用于向數(shù)據(jù)庫插入數(shù)據(jù)??梢灾付▍?shù)映射。<update>定義一個SQL更新語句,用于修改數(shù)據(jù)庫中的數(shù)據(jù)??梢灾付▍?shù)映射。<delete>定義一個SQL刪除語句,用于從數(shù)據(jù)庫中刪除數(shù)據(jù)。可以指定參數(shù)映射。<resultType>定義結(jié)果集的映射規(guī)則,可以為映射類的全路徑,這樣MyBatis可以將結(jié)果集映射成對應(yīng)JavaBean;也可以為int、double、float等基本類型參數(shù);還可以使用別名,但要符合別名命名規(guī)范,且不能與resultMap同時使用。<resultMap>定義結(jié)果集的映射規(guī)則,將數(shù)據(jù)庫查詢結(jié)果映射到Java對象??梢灾付械綄傩缘挠成洹?lt;sql>定義可重用的SQL代碼片段,用于減少重復(fù)的SQL代碼。<include>引入先前定義的SQL片段,提高XML配置的可讀性和可維護(hù)性。<typeAlias>為Java類型設(shè)置短的別名,以簡化XML配置中的類型引用。SQLMapper開發(fā)02XML方式實現(xiàn)映射器主要分為Mapper接口定義、Mapper映射文件配置、編寫SQL映射語句、編寫結(jié)果映射、Mapper接口注冊、映射器調(diào)用等環(huán)節(jié),下面以一個User對象的增刪改查操作為例詳細(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>等,例如下面映射文件中就包含了對User對象的增刪改查操作,如代碼如下:<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接口注冊:在MyBatis核心配置文件中對Mapper接口(UserMapper.java)進(jìn)行注冊<configuration><mappers><mapperclass="com.example.mapper.UserMapper"/></mappers></configuration>映射器調(diào)用02
映射器調(diào)用:首先需要獲取SqlSession對象,然后通過getMapper方法獲取Mapper接口實例,最后調(diào)用對應(yīng)的成員方法完成數(shù)據(jù)庫操作try(SqlSessionsqlSession=sqlSessionFactory.openSession()){UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);Useruser=userMapper.selectUser(1);}E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項目實現(xiàn)03業(yè)務(wù)場景03業(yè)務(wù)場景描述:項目經(jīng)理老王:小王,我想了解一下你在MyBatis核心技術(shù)方面的掌握情況,能否詳細(xì)介紹一下你學(xué)到了哪些內(nèi)容?程序員小王:當(dāng)然可以。我利用周末的時間將MyBatis的核心內(nèi)容進(jìn)行了深入的學(xué)習(xí),掌握了MyBatis的四大核心組件SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、SQLMapper的功能、原理及使用方法,現(xiàn)在有信心利用所學(xué)知識,實現(xiàn)產(chǎn)品模塊中的新建產(chǎn)品功能。項目經(jīng)理老王:好的,期待你的表現(xiàn)。數(shù)據(jù)庫設(shè)計03列名列類型描述idint主鍵productNumvarchar(50)產(chǎn)品編號productNamevarchar(50)產(chǎn)品名稱cityNamevarchar(50)城市名稱DepartureTimedate時間productPricedouble(11,0)價格productDescvarchar(250)產(chǎn)品描述productStatusint產(chǎn)品狀態(tài)產(chǎn)品信息表設(shè)計創(chuàng)建包、接口和對應(yīng)的XML文件03
因為第二章中已經(jīng)實現(xiàn)了產(chǎn)品查詢功能,因此本章將在該項目的基礎(chǔ)上繼續(xù)實現(xiàn)“新建產(chǎn)品”功能。
項目在duct包下新增mapper目錄,用于存放訪問數(shù)據(jù)庫的接口和映射文件,其中ProductMapper.java是產(chǎn)品數(shù)據(jù)訪問的Mapper接口,里面定義了新增產(chǎn)品的方法。ProductMapper.xml是產(chǎn)品的映射文件,里面定義了插入產(chǎn)品信息的SQL語句。代碼實現(xiàn)031.實現(xiàn)ProductMapper.java、ProductMapper.xml2.編輯mybatis-config.xml配置文件3.實現(xiàn)AppTest測試產(chǎn)品信息的創(chuàng)建功能03測試類的功能是完成產(chǎn)品創(chuàng)建@Testpublicvoidtest(){//獲取sqlSession對象SqlSessionsqlSession=MybatisUtils.getSqlSession();//獲取Mapper對象ProductMapperuserdao=sqlSession.getMapper(ProductMapper.class);ProductBeanproductBean=newProductBean();productBean.setProductName("長城一日游");
。。。。。//執(zhí)行插入操作intcount=userdao.insertProduct(productBean);System.out.println(count);//提交更新
sqlSmit();
//關(guān)閉sqlSession對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中山火炬職業(yè)技術(shù)學(xué)院《建筑識圖與制圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州職業(yè)技術(shù)學(xué)院《檢測技術(shù)與信號處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 長沙衛(wèi)生職業(yè)學(xué)院《信息安全理論與技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南農(nóng)業(yè)職業(yè)技術(shù)學(xué)院《中外體育文學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海洋養(yǎng)殖科技革新模板
- 職業(yè)導(dǎo)論-房地產(chǎn)經(jīng)紀(jì)人《職業(yè)導(dǎo)論》名師預(yù)測卷2
- 人教版四年級數(shù)學(xué)下冊第七單元綜合卷(含答案)
- 2024-2025學(xué)年吉林省吉林市蛟河實驗中學(xué)高二(上)期末數(shù)學(xué)試卷(含答案)
- 煙臺幼兒師范高等專科學(xué)?!端囆g(shù)家與風(fēng)格》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度高端餐飲企業(yè)雇傭司機(jī)專業(yè)服務(wù)合同3篇
- 2024年VB程序設(shè)計:從入門到精通
- 2024年故宮文化展覽計劃:課件創(chuàng)意與呈現(xiàn)
- 公共交通乘客投訴管理制度
- 不銹鋼伸縮縫安裝施工合同
- 水土保持監(jiān)理總結(jié)報告
- Android移動開發(fā)基礎(chǔ)案例教程(第2版)完整全套教學(xué)課件
- 醫(yī)保DRGDIP付費(fèi)基礎(chǔ)知識醫(yī)院內(nèi)培訓(xùn)課件
- 專題12 工藝流程綜合題- 三年(2022-2024)高考化學(xué)真題分類匯編(全國版)
- DB32T-經(jīng)成人中心靜脈通路裝置采血技術(shù)規(guī)范
- TDALN 033-2024 學(xué)生飲用奶安全規(guī)范入校管理標(biāo)準(zhǔn)
- 物流無人機(jī)垂直起降場選址與建設(shè)規(guī)范
評論
0/150
提交評論