Ja 企業應用基礎及開發- 10_第1頁
Ja 企業應用基礎及開發- 10_第2頁
Ja 企業應用基礎及開發- 10_第3頁
Ja 企業應用基礎及開發- 10_第4頁
Ja 企業應用基礎及開發- 10_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

任務2.1條件查詢掌握MyBatis映射文件及常用元素的基本作用能夠進行條件查詢操作,包括單條件查詢和多條件查詢會使用<resultMap>進行自定義結果集映射了解<sql>元素的作用及使用方法1本節任務

MyBatis映射文件是MyBatis框架的關鍵部分,其將SQL語句從Java代碼中分離出來并集中進行管理,所有的SQL語句都可以在該文件中,即使數據庫表結構發生變化或SQL語句需要被優化,也只需修改該文件,而不需要對Java代碼進行調整。以下是一個基本的MyBatis映射文件的結構示例。

2知識支撐1<?xmlversion="1.0"encoding="UTF-8"?>2<!DOCTYPEmapper3PUBLIC"-////DTDMapper3.0//EN"4"mybatis官網/dtd/mybatis-3-mapper.dtd">5<mappernamespace="com.bigdata.dao.StudentDao">6<!--結果映射-->7 <resultMapid="studentMap"type="com.bigdata.pojo.Student">8 <idcolumn="sno"property="sno"/>9 <resultcolumn="sname"property="sname"/>10 <resultcolumn="sage"property="sage"/>11 <!--其他字段映射-->12 …13 </resultMap>14 <!--SQL片段-->15 <sqlid="selectSomething">16 sno,sname,sage17 </sql>18 <!--查詢操作-->19 <selectid="selectStudentBySno"resultMap="studentMap">20 SELECT<includerefid="selectSomething"/>21 FROMstudent22 WHEREsno=#{sno}23 </select>24 <!--插入操作-->25 <insertid="方法名">26 <!--SQL語句-->27 </insert>28 <!--更新操作-->29 <updateid="方法名">30 <!--SQL語句-->31 </update>32 <!--刪除操作-->33 <deleteid="方法名">34 <!--SQL語句-->35 </delete>36</mapper><mapper>元素是MyBatis映射文件的根元素,其他元素都是該元素的子元素。MyBatis映射文件的常用元素如表2.1.1所示。

2知識支撐元素名稱說明<mapper>根元素,該元素只有一個namespace屬性,且該屬性的值需要全局唯一<cache>配置給定命名空間的緩存<cache-ref>從其他命名空間引用緩存配置<select>用于映射查詢語句<insert>用于映射添加語句<update>用于映射更新語句<delete>用于映射刪除語句<sql>可以重用的SQL塊,也可以被其他語句使用<resultMap>描述數據庫結果集和對象的對應關系

表2.1.1MyBatis映射文件的常用元素

條件查詢:根據某個或者某些條件進行查詢的操作。在MyBatis框架中<select>元素用于映射查詢語句,使用該元素可以從數據庫表中查詢數據并返回結果。其常用屬性如表2.1.2所示。

2知識支撐屬性名稱說明id表示命名空間中<select>元素的唯一標識,通過該標識可以調用這條查詢語句parameterType是一個可選屬性,用于指定SQL語句所需參數類的全限定名或別名,默認值是unsetresultType用于指定執行這條SQL語句返回的全限定類名或別名resultMap表示外部resultMap的命名引用,resultMap和resultType不能同時使用flushCache用于指定是否需要MyBatis清空本地緩存和二級緩存useCache用于控制二級緩存的開啟和關閉timeout用于設置超時時間,單位為秒fetchSize獲取記錄的總條數設定,默認值是unsetstatementType用于設置MyBatis預處理類resultSetType表示結果集的類型,默認值是unset

表2.1.2<select>元素的常用屬性說明

1.單條件查詢按主鍵查詢:根據主鍵唯一性原則,其查詢結果將返回一個對象。下面通過【任務2-1】進行具體的講解和演示。

【任務2-1】查詢學生表(student)中學號(sno)為2的學生的信息。當前student表的數據記錄情況如表2.1.3所示。2知識支撐snosnamesage1張三182李四203王五194趙六19表2.1.3

當前student表的數據記錄情況具體操作見視頻

實操2.1條件查詢(一)操作要點編寫實體類在接口中編寫功能方法(抽象);重寫接口中抽象方法并實現業務功能;在映射文件中編寫SQL語句;測試運行查看結果。按非主鍵查詢:由于查詢條件為非主鍵,因此得到的數據記錄可能有多條,即查詢結果集為一個泛型類集合。下面通過【任務2-2】進行具體的講解和演示。

【任務2-2】查詢學生表(student)中年齡(sage)為19的學生的信息。數據庫表student如表2.1.3所示。(操作要點同上)具體操作見視頻

實操2.2條件查詢(二)

2.多條件查詢

在日常生活中用的更為廣泛的不是單條件查詢而是多條件查詢,多條件查詢的處理思想是將查詢條件參數封裝到POJO類對象或集合中,之后以對象或集合的方式進行整體傳遞。接下來通過【任務2-3】演示通過POJO類封裝多條件的<select>查詢操作。【任務2-3】查詢學生表(student)中年齡(sage)為19且姓名(sname)為“王五”的學生的信息。((操作要點同上))

具體操作見視頻

實操2.3條件查詢(三)2知識支撐

自定義查詢結果映射<resultMap>

MyBatis默認會將查詢結果集中的列名與Java對象的屬性名進行自動映射,但當兩者不一致或需執行更復雜的映射邏輯(如將多個列合并到一個屬性中)時,自動映射就會失效。<resultMap>可以手動指定這種映射關系,確保查詢結果被正確地填充到Java對象中。其基本語法如下。

接下來通過一個任務演示<resultMap>元素的具體使用方法。2知識支撐1<resultMapid="唯一標識符"type="Java類型全限定名或別名">2 <!--主鍵字段映射-->3 <idproperty="Java對象屬性名"column="數據庫表列名"/>4 <!--普通字段映射-->5 <resultproperty="Java對象屬性名"column="數據庫表列名"/>6 <!--其他映射元素,如關聯映射等-->7</resultMap>【任務2-4】查詢學生表(student)中所有學生的信息。數據庫表student如表3.1.3所示。(操作要點同上)

具體操作見視頻

實操2.4使用<resultMap>實現自定義映射<sql>元素<sql>元素可以將一些常用的SQL片段提取出來進行復用,從而提高代碼的可維護性和復用性。基本用法是:使用<sql>元素定義一個可復用的SQL片段,在需要使用該片段的地方,通過<include>元素將其引入。下面通過一個任務講解和演示<sql>元素的具體使用方法。【任務2-5】使用<sql>元素將sno、sname、sgae定義為可復用片段,實現對學生姓名(sname)為三個字的學生的全查詢操作。當前student表的數據記錄情況如圖2.1.4所示。((操作要點同上))

具體操作見視頻

實操2.5使用<sql>元素實現SQL片段復用2知識支撐圖2.1.4

當前student表的數據記錄情況

我們重點學習了四個核心知識點:MyBatis映射文件的結構和常用元素,理解了<mapper>作為根元素的作用,以及<select>、<resultMap>、<sql>等元素的職責;單條件(按主鍵/非主鍵)和多條件查詢的實現方法,掌握了“接口方法定義-映射文件SQL編寫-參數傳遞”的完整流程;用<resultMap>解決字段名與屬性名不一致的問題,確保查詢結果正確填充;用<sql>元素提取重復SQL片段,提升代碼復用性和可維護性。3章節小結感謝大家的觀看與聆聽!任務2.2增刪改操作掌握<insert>、<delete>、<update>元素的基本作用及屬性的用法能運用這些元素編寫程序對數據庫進行增、刪、改操作1本節任務添加操作:在MyBatis框架中,<insert>元素用于實現SQL映射添加操作,其可以為數據庫添加記錄并返回結果信息。示例代碼如下。其常用屬性如表2.2.1所示。

2知識支撐屬性名稱說明id表示命名空間中<insert>元素的唯一標識,通過該標識可以調用這條插入語句parameterType用于指定SQL語句中所需參數的數據類型flushCache用于指定是否需要MyBatis清空本地緩存或二級緩存,默認值為falsetimeout用于設置超時時間,單位為秒,超時將拋出異常statementType用于設置MyBatis預處理類,其有三個值,分別為STATEMENT、PREPARED(默認值)和CALLABLE,分別對應JDBC中的Statement、PreparedStatement和CallableStatementkeyProperties(僅對<insert>元素和<update>元素有用)將插入或更新操作的返回值賦值給POJO類的某個屬性,若需要設置聯合主鍵,則在多個值之間使用逗號隔開keyColumn(僅對<insert>元素和<update>元素有用)用于設置第幾列為主鍵,當需要設置聯合主鍵時,在多個值之間使用逗號隔開useGeneratedKeys(僅對<insert>元素和<update>元素有用)用于設置數據庫中自動增長的字段,默認值為false表2.2.1

<insert>元素的常用屬性說明

1<insertid="insertStudent"parameterType="com.bigdata.pojo.Student">2insertintostudent(sno,sname,sage)values(#{sno},#{sname},#{sage})3</insert>id的值為接口中的方法名;parameterType的值表示傳入的參數類型為Student類類型;resultType的值為返回值的數據類型,表示查詢結果集為一個Student類型的對象;“#{參數}”表示創建一個預處理參數。【多學一招】如果使用的數據庫(如Oracle)不支持主鍵自增長的情況,此時可以使用MyBatis提供的<selectKey>元素自定義主鍵。示例代碼如下。

2知識支撐1<insertid="insertStudent"parameterType="com.bigdata.pojo.Student">2<selectKeykeyProperty="sno"resultType="Integer"order="BEFORE">3 selectif(max(sno)isnull,1,max(sno)+1)asnewIdfromstudent4</selectKey>5 insertintostudent(sno,sname,sage)values(#{sno},#{sname},#{sage})6</insert>【任務2-6】向學生表(student)中添加一條學生信息(null,李雷,20)。當前student數據庫表的數據記錄情況如圖2.2.1所示。圖2.2.1

當前student表的數據記錄情況操作要點編寫接口方法(抽象);

重寫接口抽象方法并實現業務功能;編寫映射文件;

測試運行查看結果。具體操作見視頻

實操2.6添加操作

刪除操作:在MyBatis框架中,在MyBatis框架中,<delete>元素用于實現SQL映射刪除操作,其可以為數據庫刪除記錄并返回結果信息。示例代碼如下。其常用屬性如表2.2.2所示。

2知識支撐屬性名稱說明id表示命名空間中<delete>元素的唯一標識,通過該標識可以調用這條刪除語句parameterType用于指定SQL語句中所需參數類的全限定名或別名,默認值是unsetflushCache用于指定是否需要MyBatis清空本地緩存和二級緩存timeout用于設置超時時間,單位為秒statementType用于設置MyBatis預處理類表2.2.2

<delete>元素的常用屬性說明

1<deleteid="deleteStudent"parameterType="Integer">2 deletefromstudentwheresno=#{sno}3</delete>id屬性的值為接口中的方法名;parameterType的值表傳入參數的數據類型,如果要清空整個數據庫中的數據記錄,那么該屬性可省略;參數符號“#{參數}”表示創建一個預處理參數【任務2-7】刪除學生表(student)中年齡(sage)為20的學生的信息。當前student數據庫表的數據記錄情況如圖2.2.2所示。(操作要點同上)圖2.2.2

當前student表的數據記錄情況具體操作見視頻

實操2.7刪除操作

修改操作:在MyBatis框架中,<update>元素用于實現SQL映射修改操作,其可以為數據庫修改記錄并返回結果信息。示例代碼如下。其常用屬性如表2.2.2所示。

2知識支撐1<updateid="updateStudent"parameterType="com.bigdata.pojo.Student">2 updatestudentsetsage=#{sage}wheresno=#{sno}3</update>【任務2-8】將學生表(student)中學號(sno)為1的學生的姓名修改為“張大”。當前student數據庫表中的數據記錄情況如圖2.2.3所示。(操作要點同上)圖2.2.3

當前student數據庫表中的數據記錄情況具體操作見視頻

實操2.8修改操作

我們重點學習了<insert>、<delete>、<update>三個元素的作用、常用屬性以及實際應用示例,還了解了特殊場景下(如數據庫不支持自增主鍵)的解決方案。大家課后一定要結合實操視頻,自己動手編寫代碼,把這些知識點真正消化吸收,只有多練才能熟練掌握,為后續的學習和項目開發做好準備。3章節小結感謝大家的觀看與聆聽!任務2.3關聯映射了解表與表的三種映射關系;能夠通過Java對象描述數據之間的關系;理解<association>、<collection>等元素的相關屬性與嵌套方法;會使用<association>、<collection>等元素進行一對一、一對多、多對多關聯查詢操作。1本節任務

雖然MyBatis框架提供了自動映射機制,使得數據庫表的字段可以與Java對象的屬性自動映射,但在實際開發過程中,數據庫表的字段名與Java對象的屬性名之間往往存在差異。當兩者不一致時,自動映射會失效。<resultMap>元素可以手動指定字段與屬性的映射關系,確保查詢結果被正確填充。

關聯映射:表與表之間一般存在3種關系:一對一、一對多和多對多。如圖2.3.1所示一對一:指一個數據庫表中的一條記錄最多可以和另一個數據庫表中的一條記錄相關;一對多:指一個數據庫表中的一條記錄在關聯字段上可以對應另一個數據庫表中的多條記錄。多對多:指兩個數據庫表之間的多條記錄可以互相對應。為實現多對多關聯映射,通常需要借助第三個關聯表來存儲兩個表之間的關聯關系。

2知識支撐圖2.3.1

表與表之間的關系

數據庫表之間的關系實質上反映的是數據與數據之間的關系,因此除了數據庫表,在Java中還可以通過對象描述數據之間的關系。圖2.3.2所示為通過Java對象描述數據與數據之間的關系。

2知識支撐圖2.3.2

通過Java對象描述數據與數據之間的關系一對一:在本類中定義與之關聯的類的對象,并以此作為屬性;一對多:一個A類對象對應多個B類對象;多對多:若有兩個相互關聯的類,則可以在任意一個類中定義多個對方類的對象。

一對一關系查詢:<association>元素用于處理一對一關系查詢,該元素是<resultMap>元素的子元素,提供了一系列用于維護數據表之間的關系的屬性,具體如表2.3.1所示。

2知識支撐屬性名稱說明property用于指定映射到的實體類對象的屬性,與表字段一一對應column用于指定表中對應的字段javaType用于指定映射到實體對象的屬性的類型jdbcType用于指定數據表中對應字段的類型fetchType用于指定在關聯查詢時是否啟用延遲加載,有lazy和eager兩個屬性值可供選擇,默認值為lazyselect用于指定引入嵌套查詢的子SQL語句autoMapping用于指定是否自動映射typeHandler用于指定一個類型處理器

表2.3.1<association>元素的常用屬性說明

可以通過以下兩種方式配置<association>元素。示例代碼如下:嵌套查詢方式:通過執行另外一條SQL映射語句來返回預期的復雜類型。嵌套結果查詢方式:使用嵌套結果映射來處理重復的聯合結果的子集。

2知識支撐1<associationproperty="sc_no"column="sc_no"javaType="com.bigdata.pojo.StudentCredit"2select="com.bigdata.dao.StudentCreditDao.findStudentCreditNoById"/>1<associationproperty="sc_no"javaType="com.bigdata.pojo.StudentCredit">2<idproperty="id"column="sc_no"/>3<resultproperty="sc_no"column="sc_no"/>4</association>【任務2-9】一人一檔案。要求查詢用戶“花花”的檔案信息。操作要點數據準備;

編寫實體類;創建DAO接口并定義接口方法(抽象);

重寫接口抽象方法并向數據庫中插入數據;創建并編寫MyBatis映射文件;

修改MyBatis核心配置文件;測試運行查看結果。具體操作見視頻

實操2.9一對一關系映射

一對多關系查詢:在MyBatis中,<collection>元素用于處理一對多關系查詢,其大部分屬性與<association>元素的相同,但包含一個特殊屬性ofType。ofType屬性與javaType屬性對應,用于指定實體類對象中集合類屬性所包含的元素的類型。可以將查詢結果中的多條記錄映射到一個Java對象的集合屬性中,從而實現一對多關系的數據封裝。可以通過以下兩種方式配置該元素。嵌套查詢方式:通過執行另外一條SQL映射語句來返回預期的復雜類型,示例代碼如下。嵌套結果查詢方式:使用嵌套結果映射來處理重復的聯合結果的子集,示例代碼如下。2知識支撐1<collectionproperty="ordersList"column="id"ofType="com.bigdata.pojo.Orders"2select="com.bigdata.dao.OrdersDao.selectOrders/>1<associationproperty="sc_no"column="sc_no"javaType="com.bigdata.pojo.StudentCredit"2select="com.bigdata.dao.StudentCreditDao.findStudentCreditNoById"/>【任務2-10】一個用戶可以購買多個商品。要求查詢uid為4的用戶購買的所有商品的信息。(操作要點同上)具體操作見視頻

實操2.10一對多關聯映射

多對多關系查詢:在MyBatis中,也使用<collection>元素進行多對多關系查詢。【任務2-11】一個學生可以選修多門課程,一門課程可以被多個學生選修。查詢選修了課程“高等數學”的學生。(操作要點同上)2知識支撐具體操作見視頻

實操2.11多對多關聯映射

我們重點學習了表與表的三種關聯關系(一對一、一對多、多對多),以及如何用Java對象描述這些關系;掌握了MyBatis中實現關聯查詢的核心元素——處理一對一的<association>和處理一對多、多對多的<collection>,包括它們的屬性和兩種配置方式(嵌套查詢、嵌套結果查詢);最后還通過三個實際任務,明確了關聯查詢的操作步驟。3章節小結感謝大家的觀看與聆聽!任務2.4配置resultMap自動映射級別和MyBatis緩存機制了解MyBatis的3種自動映射級別類型以及自動映射級別的配置方法;理解一級緩存、二級緩存的定義及原理;會啟動一級緩存和二級緩存。1本節任務

resultMap自動映射級別result自動映射級別的類型及適用場景MyBatis提供了3種自動映射級別類型,其可在核心配置文件mybatis-config.xml的<settings>標簽中通過autoMappingBehavior設置項進行配置。NONE:禁用自動映射,只有在<resultMap>中明確指定的映射才會生效。適用于希望對映射關系進行精確控制,但不想依賴自動映射的場景。PARTIAL:默認的自動映射級別,會自動映射除嵌套結果映射(也就是含有<association>或<collection>標簽)之外的結果集。在大多數情況下,默認使用PARTIAL自動映射級別就足夠了。FULL:會自動映射所有結果集,包含嵌套結果映射。

適用于當數據庫表的字段名和Java對象的屬性名基本一致,且結果集包含嵌套結構時,可以使用FULL自動映射級別,減少手動配置的工作量。2知識支撐自動映射級別的配置方法在MyBatis核心配置文件mybatis-config.xml里,使用<settings>標簽來配置自動映射的級別。示例代碼如下。2知識支撐1<configuration>2<settings>3<!--設置自動映射級別為FULL-->4 <settingname="autoMappingBehavior"value="FULL"/>5</settings>6 <!--其他配置-->7</configuration>如果使用Java代碼配置MyBatis,那么也可以通過Configuration對象來設置自動映射級別。示例代碼如下。1Configurationconfiguration=newConfiguration();2//設置自動映射級別為FULL3configuration.setAutoMappingBehavior(4 org.apache.ibatis.session.AutoMappingBehavior.FULL);5//其他配置6…MyBatis緩存機制:MyBatis提供了兩級緩存機制,分別是一級緩存和二級緩存,合理使用緩存可以顯著提升數據庫操作的性能,減少對數據庫的訪問次數。

一級緩存

:一級緩存又稱本地緩存,可以理解為SqlSession的緩存。換句話說,在同一個SqlSession里執行相同的查詢操作時,MyBatis會優先從一級緩存中查找結果。若一級緩存中存在所需的數據,就直接返回該數據,而不會再次執行數據庫查詢。

原理:當開啟一個SqlSession后,MyBatis會為這個SqlSession創建一個緩存區域。在執行查詢操作時,MyBatis會把查詢的SQL語句及相應的參數作為鍵,查詢結果作為值,存放到這個緩存區域中。如果之后在同一個SqlSession里執行相同的查詢操作(SQL語句和參數都相同),那么MyBatis會先檢查緩存中是否有對應的結果。如果有,就直接使用緩存中的結果;如果沒有,才會去數據庫中執行查詢,并把查詢結果存入緩存。示例代碼如下。運行后結果如圖2.4.1所示。

2知識支撐2知識支撐1SqlSessionsqlSession=MyBatisUtils.getSqlSession();2//第一次:執行查詢操作3Studentstudent=(Student)sqlSession.selectOne("findStudentBySno",2);4//第二次:執行查詢操作5Studentstudent1=(Student)sqlSession.selectOne("findStudentBySno",2);6//此處省略提交事務、釋放資源代碼7...8System.out.println("第一次查詢結果:"+student);9System.ou

溫馨提示

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

評論

0/150

提交評論