




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
軟件架構(gòu)設計實戰(zhàn)——基于SSM框架Software
Architecture
Design
Practice
Based
on
SSM
Framework第10章單表的CRUD操作123數(shù)據(jù)查詢操作使用insert元素添加數(shù)據(jù)使用delete元素刪除數(shù)據(jù)4使用update元素修改數(shù)據(jù)5使用getMapper和工具類簡化代碼編寫數(shù)據(jù)查詢操作查詢數(shù)據(jù)庫中的數(shù)據(jù)并交由面向?qū)ο蟮某绦蛟O計語言進行處理是數(shù)據(jù)庫操作中最為常見的操作。在第9章的“第一個MyBatis應用程序”中存在Student對象的兩個屬性沒有封裝成功的問題,在本章中將進行詳細講解。11.1結(jié)果映射resultMap所謂結(jié)果映射就是讓數(shù)據(jù)表的字段名稱與Java實體類的屬性名稱進行一一關(guān)聯(lián)匹配的機制,以便于MyBatis查完數(shù)據(jù)庫后能夠?qū)㈥P(guān)系數(shù)據(jù)庫的查詢結(jié)果正確地封裝為Java對象。1.1結(jié)果映射resultMapresultMap元素是對象關(guān)系映射文件<mapper>的子元素,主要完成對象屬性與數(shù)據(jù)表字段之間的關(guān)系對應,方便數(shù)據(jù)查詢使用。1.1結(jié)果映射resultMap1.1結(jié)果映射resultMap1.1結(jié)果映射resultMap針對第9章的“第一個MyBatis應用程序”中Student的屬性stuId和stuName沒有封裝成功的問題,修改StudentMapper.xml文件,在其中加入如下代碼:<!--定義結(jié)果集映射,Student類屬性與數(shù)據(jù)表t_student字段--><resultMapid="studentResultMap"type="com.example.ssm.pojo.Student"><idproperty="stuId"column="stu_id"/><resultproperty="stuName"column="stu_name"/><resultproperty="age"column="age"/><resultproperty="sex"column="sex"/><resultproperty="email"column="email"/></resultMap>1.2使用selectList方法查詢使用selectOne查詢方法,能夠從數(shù)據(jù)庫中獲取一條數(shù)據(jù)并封裝成為一個POJO對象。但是實際項目開發(fā)中,很多時候通過查詢語句返回的是一個結(jié)果集(二維表),MyBatis框架提供了selectList查詢方法,其完整描述形式有三種:<E>List<E>selectList(Stringstatement)<E>List<E>selectList(Stringstatement,Objectparameter)<E>List<E>selectList(Stringstatement,Objectparameter,RowBoundsrowBounds)1.2使用selectList方法查詢其中,參數(shù)statement是在配置文件中定義的<select.../>元素的id,parameter是查詢所需的參數(shù),通常是對象或者Map,rowBounds對象用于分頁,它的兩個屬性:offset指查詢的當前頁數(shù);limit指當前頁顯示多少條數(shù)據(jù)。返回執(zhí)行SQL語句查詢結(jié)果的泛型對象的集合。1.2使用selectList方法查詢下面以只包含一個參數(shù)的selectList方法為例,結(jié)合新的需求“查詢用戶名中含字母‘a(chǎn)’的學員信息”,進一步完善“第一個MyBatis應用程序”。在StudentMapper.xml文件中添加如下代碼。1.3多參數(shù)查詢在“第一個MyBatis應用程序”中,使用selectOne方法,傳入了一個整數(shù)型參數(shù)100,在使用selectList方法中,沒有傳入?yún)?shù),那么在多條件查詢中,需要傳入多個參數(shù),該如何處理呢?這就需要使用到查詢方法中的第二參數(shù)Objectparameter,在這里的Object可以使用Map類型,添加多個鍵-值對,完成多參數(shù)的傳遞。1.3多參數(shù)查詢這里添加新的需求“查詢年齡大于19歲的男學員”,來完成多參數(shù)查詢的實例講解。在StudentMapper.xml文件中添加如下代碼。1.4動態(tài)查詢查詢條件的多變性在很多系統(tǒng)中都有所體現(xiàn),例如購物網(wǎng)站中的商品篩選,篩選條件有很多,每個人選的條件也都不一樣,那么最后拼接生成的SQL查詢語句也不相同,在傳統(tǒng)的JDBC或其它類似的開發(fā)框架中,開發(fā)人員通常需要手動拼接SQL語句,在拼接時要確保添加了必要的空格、關(guān)鍵字等,還要注意去掉列表最后一個列名的逗號等諸多需要考慮的細節(jié)問題。1.4動態(tài)查詢MyBatis提供了強大的動態(tài)SQL功能,能夠根據(jù)傳遞的參數(shù)不同,靈活的生成SQL語句,完成不同條件組合的查詢?nèi)蝿?。動態(tài)SQL大大減少了編寫代碼的工作量,更體現(xiàn)了MyBatis的靈活性、高度可配置性和可維護性。1.4動態(tài)查詢1.if元素MyBatis框架中提供的if元素類似于Java程序設計中的if語句,是MyBatis動態(tài)SQL中最常用的判斷語句。使用if元素可以節(jié)省許多拼接SQL的工作,而把主要精力集中在Java代碼的編寫和XML配置文件的維護上。1.4動態(tài)查詢2.where元素在if元素的例子當中,讀者不難發(fā)現(xiàn),在where的后面需要手動加入“1=1”的子句,原因就是為了避免當if查詢條件都不成立時,出現(xiàn)SQL語句錯誤的問題。其實在MyBatis中提供了where元素,就是為了避免在多條件判斷的時候,出現(xiàn)關(guān)鍵字的冗余、缺失等情況。where元素主要用來簡化SQL語句中的條件判斷,可以自動處理AND/OR條件,語法如下所示。1.4動態(tài)查詢3.choose元素與if元素的功能類似,choose元素同樣用于條件判斷,但不同的是choose元素適用于多個判斷條件的場景,類似于Java程序設計中的switch語言。在choose元素中包含when和otherwise兩個子元素,一個choose元素中至少包含一個when子元素,0個或1個otherwise子元素,與Java語言中的switch-case-default語句相同,都進行“多選一”的條件判斷。當應用程序中業(yè)務關(guān)系比較復雜的時候,MyBatis可通過choose元素來動態(tài)控制SQL語言的生成。1.4動態(tài)查詢動態(tài)語句choose-when-otherwise語法如下所示。1.4動態(tài)查詢4.trim元素trim元素用于刪除拼接SQL語句中多余的關(guān)鍵字,它可以直接實現(xiàn)where元素的功能,在前面的SQL查詢語句中“where1=1”就是為了避免與后面的語句中“and”直接拼接。通過trim元素能夠在SQL語句拼接的過程中根據(jù)參數(shù)的傳遞情況自動刪除或者增加某些關(guān)鍵字。trim元素包含4個屬性1.4動態(tài)查詢5.foreach元素在前面已經(jīng)介紹了Mybatis框架提供的if、where、trim、choose等元素,來處理動態(tài)查詢語句中的一些簡單操作。對于一些SQL查詢語句中含有in條件,需要迭代條件集合來生成的情況,則可以使用foreach元素來實現(xiàn)SQL條件的迭代。1.4動態(tài)查詢foreach元素用于循環(huán)語句,它很好的支持了集合操作,如List、Set、Map接口的數(shù)據(jù)集合ArrayList、HashSet、LinkedHashMap等,并對其提供遍歷的功能,語法格式如下所示。1.4動態(tài)查詢foreach元素的各個屬性具體含義1.4動態(tài)查詢6.bind元素在實際應用開發(fā)當中,由于不同的數(shù)據(jù)庫支持的SQL語法略有不同,例如:字符串連接在MySQL數(shù)據(jù)庫中采用concat函數(shù)、而Oracle數(shù)據(jù)庫中采用符號“||”等。如果需要更換數(shù)據(jù)庫,那么程序中的相應SQL語句就需要重寫,這就給項目的維護帶來了不便性,項目的可移植性也會大打折扣。此時,可以通過bind元素來解決此類數(shù)據(jù)庫之間的兼容性問題。1.4動態(tài)查詢bind元素將OGNL表達式的值綁定到一個變量中,通過bind元素對變量進行賦值,屏蔽各種數(shù)據(jù)庫之間的差異,讓SQL語句的引用變得更加簡單。bind元素有兩個屬性。name:給對應參數(shù)取的別名。value:對應傳入實體類的某個字段,可以進行字符串拼接等特殊處理。使用insert元素添加數(shù)據(jù)在上一節(jié)中介紹了MyBatis提供的各種數(shù)據(jù)查詢操作,在本節(jié)中將介紹insert元素的使用方法,在MyBatis中通過insert能夠定義插入語句,執(zhí)行數(shù)據(jù)插入操作,其返回值為成功插入數(shù)據(jù)庫記錄的行數(shù)。21.4動態(tài)查詢1.4動態(tài)查詢使用insert元素向數(shù)據(jù)表插入數(shù)據(jù)時,一般都需要往數(shù)據(jù)表的多個字段同時插入數(shù)據(jù),在這里就需要使用到集合數(shù)據(jù)類型,如Map、List、JavaBean等。在向數(shù)據(jù)表插入數(shù)據(jù)的時候,數(shù)據(jù)表的主鍵既可以自增長也可以是非自增長,在使用insert元素的時候,需要進行相應的設置,下面對這兩種情況進行分別進行介紹。2.1主鍵由數(shù)據(jù)庫自增長在項目開發(fā)中,有很多數(shù)據(jù)庫都支持數(shù)據(jù)表主鍵的自增長,例如MySQL、SQLServer等數(shù)據(jù)庫表可以采用自動遞增的字段作為其主鍵,當向這樣的數(shù)據(jù)庫表插入數(shù)據(jù)時,即使不指定自增主鍵的值,數(shù)據(jù)庫也會根據(jù)自增規(guī)則自動生成主鍵并插入到表中。2.2主鍵非自增長在項目開發(fā)中,如果沒有設置數(shù)據(jù)表主鍵的自增長,或者數(shù)據(jù)庫不支持主鍵的自增長(例如Oracle),就需要在項目開發(fā)中使用insert元素的子元素selectKey,手動進行主鍵的增長設置,selectKey元素的語法格式如下所示。2.2主鍵非自增長selectKey元素中屬性說明如下:keyProperty:用于指定主鍵值對應的POJO類的屬性。resultType:表示SQL查詢語句所返回值的數(shù)據(jù)類型,這是用的Java語言中的數(shù)據(jù)庫類型,例如:Integer、String等。order:該屬性取值可以為BEFORE或AFTER。BEFORE表示先執(zhí)行selectKey元素內(nèi)的語句,再執(zhí)行插入語句;AFTER表示先執(zhí)行插入語句再執(zhí)行selectKey元素內(nèi)的語句。2.2主鍵非自增長在上述代碼先通過selectKey元素,從數(shù)據(jù)表t_student中查詢出stu_id的最大值并加1,作為傳入?yún)?shù)student中stuId的屬性值,然后再生成insert語句,并插入主鍵值。使用delete元素刪除數(shù)據(jù)MyBatis框架用delete元素來定義delete語句,執(zhí)行刪除操作。當MyBatis執(zhí)行完一條刪除語句后,會返回一個整數(shù),表示受影響的數(shù)據(jù)庫記錄的行數(shù)。3使用delete元素刪除數(shù)據(jù)3使用delete元素刪除數(shù)據(jù)在使用delete元素定義刪除語句的時候,使用屬性parameterType傳入所需參數(shù),可以是基本數(shù)據(jù)類型,也可以是集合類型,例如:List、Set、Map等,也可以是JavaBean。如果是單個參數(shù),一般采用基本數(shù)據(jù)傳遞參數(shù)即可;如果是多個參數(shù)但是不超過5個,一般采用Map的集合類型即可;如果參數(shù)多個5個,使用Map進行參數(shù)傳入,就會導致程序的可讀性差、代碼難以理解等諸多問題,此時一般采用JavaBean的方式進行參數(shù)傳遞。3使用delete元素刪除數(shù)據(jù)這里以“刪除駕校學員信息管理系統(tǒng)中的email地址含有‘org’、年齡為20歲的男性學員”為例,采用Map集合類型傳入查詢參數(shù),來定義SQL語句。在StudentMapper.xml文件中添加刪除數(shù)據(jù)的delete語句deleteStudentByMap,代碼如下所示。3使用update元素修改數(shù)據(jù)MyBatis映射文件通過update元素定義更新語句,執(zhí)行修改操作。當執(zhí)行完update元素定義的更新語句之后,也會返回一個整數(shù),表示修改數(shù)據(jù)庫記錄的行數(shù)。update元素的屬性與delete元素類似、傳遞的參數(shù)的使用方法也是一樣的。4使用update元素修改數(shù)據(jù)這里采用JavaBean的方式進行參數(shù)傳遞,完成“修改駕校學員信息管理系統(tǒng)中的編號為100的學員信息,姓名修改為Bob,年齡修改為25,電子郵箱修改為bob@126.com”。在StudentMapper.xml文件中添加修改數(shù)據(jù)的update語句updateStudentByJavaBean,代碼如下所示。4使用update元素修改數(shù)據(jù)采用JavaBean的方式進行數(shù)據(jù)傳遞具有較好的靈活性,JavaBean的所有屬性都可以當中參數(shù)傳遞到映射文件定義的SQL語句內(nèi),例如上例中updateStudentByJavaBean語句就是用了Student對象中的4個參數(shù)(stuId作為條件,其余stuName、age、email作為修改參數(shù))。4使用getMapper和工具類簡化代碼編寫在MybatisTest測試類中,讀者不難發(fā)現(xiàn)findStudentById、findStudentByNamea等方法中很多代碼是相同的,主要用來完成讀取配置文件、構(gòu)建SqlSessionFactory、關(guān)閉SqlSession等操作,根據(jù)代碼復用原則,可以把這些重復的代碼提取到一個公共的類中,建立一個工具類(MyBatisUtil),由工具類來完成這些公共的操作。5使用getMapper和工具類簡化代碼編寫工具類MyBatisUtil的代入如下所示。5使用getMapper和工具類簡化代碼編寫該工具類幾乎可以應用于所有使用MyBatis框架的項目,具有較好的通用性,讀者在項目開發(fā)中可以直接復用該類,簡化項目代碼的編寫。5使用getMapper和工具類簡化代碼編寫在MyBatis框架中,也提供了在DAO層面向接口的編程,在這里只需要定義接口以及接口所對應的映射文件,其實現(xiàn)類可以由MyBatis框架通過代理模式自動來生成,進一步降低了項目開發(fā)的復雜度,減少了代碼的編寫。5使用getMapper和工具類簡化代碼編寫在工程項目中com.example.ssm.dao包中新建一個接口IStudentDao,聲明一個查詢方法findStudentById,代碼如下所示。packagecom.example.ssm.dao;importcom.example.ssm.pojo.Student;publicinterfaceIStudentDao{
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 義教合同樣本
- 中介收房合同樣本
- 公司叉車售賣合同樣本
- 個人植樹造林合同樣本
- 公司水泥采購合同樣本
- 化工筆試試題及答案
- 2024銀行春招職場技能試題及答案
- 合作社空殼整改措施
- 沖突碰撞測試題及答案
- 2024年招西寧市第二人民醫(yī)院招聘筆試真題
- 膳食結(jié)構(gòu)與膳食指南膳食結(jié)構(gòu)
- 在線網(wǎng)課知道《Java EE 開發(fā)技術(shù)(武昌理工學院)》單元測試考核答案
- 全國初中數(shù)學優(yōu)質(zhì)課一等獎《黃金分割》教學設計
- 補液護理措施
- 高校金課建設方案
- 裝飾裝修工程監(jiān)理細則詳解樣本
- 現(xiàn)代服務業(yè)發(fā)展課件
- 理論提升堅定強國復興信念
- 工程技術(shù)研究中心管理制度
- 高職院校教學質(zhì)量保障體系的構(gòu)建
- 《共和國之戀》教學設計(江蘇省市級優(yōu)課)-八年級音樂教案
評論
0/150
提交評論