




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2025第6章MyBatis《JavaWeb數據可視化開發教程》延時符延時符學習目標理解MyBatis的基本概念和原理。掌握MyBatis的核心配置文件和映射文件的結構。掌握MyBatis的注解方式和XML方式的配置和使用,了解二者的區別和優劣勢。掌握MyBatis的動態SQL語句編寫和使用。熟練使用MyBatis進行數據庫操作,包括增刪改查等基本操作。編寫高質量MyBatis映射文件,實現數據庫表與Java對象映射。使用MyBatis的注解方式或XML方式進行配置,靈活切換不同的配置方式。0102目錄CONTENTSPART01快速上手及配置文件延時符PART02Mybatis常見APIPART03MyBatis映射PART04動態SQL行業PPT模板/hangye/PART05MyBatis與Spring整合開發1快速上手及配置文件延時符延時符01快速上手MyBatis是基于Java的持久層框架,旨在簡化數據庫操作并提高代碼的可讀性和可維護性,核心功能是將Java對象與數據庫表中的記錄進行映射,從而簡化開發者的工作;支持多種映射配置,如XML配置文件、注解等,以滿足不同開發需求。為了幫助讀者快速的掌握MyBatis的使用,請通過教材入門程序來學習編程過程,具體步驟詳見教材視頻。
延時符02
配置文件MyBatis的配置文件包含了影響MyBatis行為的設置和屬性信息,
配置文檔的層次結構如下延時符02
配置文件元素<properties>代表了屬性配置,既可以在外部的Java屬性文件進行配置,也可以在標簽內部動態替換。例如這個例子中的username和password屬性將由<properties>元素中設置的值來替換。而driver和url屬性將會由perties文件中對應的值來替換。<propertiesresource="org/mybatis/example/perties"><propertyname="username"value="dev_user"/><propertyname="password"value="F2Fa3!33TYyg"/></properties><environments>元素定義了配置環境的方式,MyBatis可以通過配置來適應多種環境,這種機制有助于將SQL映射應用于多種數據庫之中。例如在開發、測試和生產環境實現有不同的配置;或者在具有相同Schema的多個數據庫中使用相同的SQL映射。<environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"><propertyname="..."value="..."/></transactionManager><dataSourcetype="POOLED"><propertyname="driver"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${username}"/><propertyname="password"value="${password}"/></dataSource></environment></environments>延時符02
配置文件映射器的作用是告訴MyBatis去哪里去找到SQL映射語句,有類路徑的資源引用、完全限定資源定位符、完全限定類名、包名4種形式,例如:<!--使用相對于類路徑的資源引用--><mappers><mapperresource="org/mybatis/builder/AuthorMapper.xml"/><mapperresource="org/mybatis/builder/BlogMapper.xml"/><mapperresource="org/mybatis/builder/PostMapper.xml"/></mappers><!--使用完全限定資源定位符(URL)--><mappers><mapperurl="file:///var/mappers/AuthorMapper.xml"/><mapperurl="file:///var/mappers/BlogMapper.xml"/><mapperurl="file:///var/mappers/PostMapper.xml"/></mappers><!--使用映射器接口實現類的完全限定類名--><mappers><mapperclass="org.mybatis.builder.AuthorMapper"/><mapperclass="org.mybatis.builder.BlogMapper"/><mapperclass="org.mybatis.builder.PostMapper"/></mappers><!--將包內的映射器接口實現全部注冊為映射器--><mappers><packagename="org.mybatis.builder"/></mappers>延時符02
配置文件類型別名可為Java類型設置一個縮寫名字,它僅用于XML配置,意在降低冗余的全限定類名書寫。例如當下面這樣配置了類型別名Blog時,則可以在任何有domain.blog.Blog的地方使用直接使用Blog。<typeAliases><typeAliasalias="Author"type="domain.blog.Author"/><typeAliasalias="Blog"type="domain.blog.Blog"/><typeAliasalias="Comment"type="domain.blog.Comment"/><typeAliasalias="Post"type="domain.blog.Post"/><typeAliasalias="Section"type="domain.blog.Section"/><typeAliasalias="Tag"type="domain.blog.Tag"/></typeAliases>2延時符Mybatis常見API延時符
SqlSessionFactory主要作用是創建SqlSession;而SqlSession是應用程序與持久層之間執行交互操作的一個單線程對象,其主要作用是執行持久化操作。SqlSessionFactory是由SqlSessionFactoryBuilder創建的,可以從XML、注解或Java配置代碼來創建SqlSessionFactory。延時符01
創建實例SqlSessionFactoryBuilder有五個build方法,實現從不同的資源中創建一個SqlSessionFactory實例。SqlSessionFactorybuild(InputStreaminputStream)SqlSessionFactorybuild(InputStreaminputStream,Stringenvironment)SqlSessionFactorybuild(InputStreaminputStream,Propertiesproperties)SqlSessionFactorybuild(InputStreaminputStream,Stringenv,Propertiesprops)SqlSessionFactorybuild(Configurationconfig)延時符02SqlSessionSqlSession在MyBatis中是非常強大的一個類,包含所有執行語句、提交或回滾事務以及獲取映射器實例的方法。SqlSession類的方法超過20個,為方便理解,將它們分成幾種組別并列出對應常見方法。1)語句執行方法語句執行方法被用來執行定義在SQL映射文件中的SELECT、INSERT、UPDATE和DELETE。常見方法如下所示,其中參數statement代表映射語句的ID,parameter代表執行SQL語句的參數。<T>TselectOne(Stringstatement,Objectparameter):用于執行一條查詢語句,并返回查詢結果中的第一個記錄,方法的返回類型是泛型T,表示返回的對象類型。
<E>List<E>selectList(Stringstatement,Objectparameter):用于執行一條查詢語句,并返回查詢結果所有記錄組成的列表。方法的返回類型是泛型List<E>,表示返回的是列表元素類型。
<T>Cursor<T>selectCursor(Stringstatement,Objectparameter):用于執行查詢語句,但是返回的是一個Cursor<T>對象,這個對象允許迭代讀取查詢結果集中的每一條記錄,但它不會一次性將所有記錄加載到內存中,實現數據的惰性加載。l<K,V>Map<K,V>selectMap(Stringstatement,Objectparameter,StringmapKey):用于執行查詢語句,并返回查詢結果中的所有記錄,但是以Map的形式返回,其中mapKey參數是指定將查詢結果的哪個字段作為Map的鍵。
intinsert(Stringstatement,Objectparameter):用于執行一條插入語句,將parameter對象映射的數據插入到數據庫中,方法的返回值是當次操作影響的行數。
intupdate(Stringstatement,Objectparameter):用于執行一條更新語句,根據parameter對象映射的數據更新數據庫中的記錄,方法的返回值同樣是當次操作影響的行數。
intdelete(Stringstatement,Objectparameter):用于執行一條刪除語句,根據parameter對象映射的條件刪除數據庫中的記錄,方法的返回值是當次操作影響的行數。延時符02SqlSession2)事務執行方法如果沒有設置Mybatis自動提交,也沒有使用外部事務管理器,則有以下四個方法用來控制事務。voidcommit():用于提交當前會話中執行的所有更改。lvoidcommit(booleanforce):與上面的commit()類似,但它提供了一個可選的force參數。如果force設置為true,即使沒有任何更改,也會強制提交事務。voidrollback():用于撤銷當前會話中執行的所有更改,任何在調用該方法之前已經提交到數據庫的更改都將被撤銷。voidrollback(booleanforce);與rollback()方法相似,如果force設置為true,則會話中將進行強制回滾。3MyBatis映射延時符延時符00簡介MyBatis映射是將Java接口的方法和SQL語句進行關聯,或者將Java對象映射成數據庫中的行記錄。使開發者可以將更多的精力集中在業務邏輯上,而不是數據庫操作的細節上,極大地提高了開發效率和項目的可維護性。延時符01XML文件映在XML映射文件中<select>元素負責查詢,其查詢結果將被映射到Java對象。如下XML映射文件中返回一個或者多個Student類型的對象,對象屬性值與查詢結果對應:<?xmlversion="1.0"encoding="UTF-8"?><selectid="selectOneStu"resultType="demo.Student"parameterType="Integer"> select*fromstudentwhereid=#{id}</select><selectid="selectAll"resultType="demo.Student">select*fromstudent</select>第一個<select>標簽定義一個名為selectOneStu的查詢操作,它的作用是根據傳入的整數參數id查詢數據庫中student表中的一項記錄,并將其映射到demo.Student類型的對象中。resultType屬性指定映射的Java類型,parameterType屬性指定傳入參數的類型;這里是一個整型,對應SQL查詢語句select*fromstudentwhereid=#{id}中的id字段。第二個<select>標簽定義一個名為selectAll的操作,它的作用是查詢student表中的所有記錄,并將每條記錄映射到demo.Student類型的對象中。延時符01XML文件映MyBatisMapper文件中,可以使用<insert>,<update>和<delete>元素定義插入、更新和刪除三種數據庫操作。<insertid="insertStu"parameterType="demo.Student">insertintostudentvalues(null,#{age},#{name},#{sex})</insert><updateid="updateData"parameterType="demo.Student">updatestudentsetage=#{age},sex=#{sex},name=#{name}whereid=#{id}</update><deleteid="deleteOne"parameterType="String"> deletefromstudentwherename=#{name}</delete><deleteid="deleteAll">deletefromstudent</delete>延時符01XML文件映可以將所有的列映射到resultType屬性指定的對象上,需要列名與對象屬性名完全一致。當其不匹配的時候可以顯式使用外部的<resultMap>元素方式,在引用它的語句中設置resultMap屬性就行,同時去掉resultType屬性。比如下面將表中的字段user_id,user_name,hashed_password映射到User的屬性id,username,password中:<resultMapid="userResultMap"type="User"><idproperty="id"column="user_id"/><resultproperty="username"column="user_name"/><resultproperty="password"column="hashed_password"/></resultMap><selectid="selectUsers"resultMap="userResultMap">selectuser_id,user_name,hashed_passwordfromsome_tablewhereid=#{id}</select>延時符01XML文件映在MyBatis中,<sql>元素用于定義可重用的SQL片段,而<include>元素用于在其他的SQL映射語句中包含這些片段。這樣可以提高SQL映射文件的可維護性,避免重復編寫相同的SQL代碼。例如:<sqlid="userColumns">${alias}.id,${alias}.username,${alias}.password</sql><selectid="selectUsers"resultType="map">select<includerefid="userColumns"><propertyname="alias"value="t1"/></include>,<includerefid="userColumns"><propertyname="alias"value="t2"/></include>fromsome_tablet1crossjoinsome_tablet2</select>延時符02注解映射增、刪、改、查操,@Insert:插入操作,對應方法返回值表示影響的行數,@Update:更新操作,對應方法返回值表示影響的行數。@Delete:刪除操作,對應方法返回值表示影響的行數。@Select:用于查詢操作。@MapperpublicinterfaceBlogMapper{@Insert("INSERTINTOblog(title,content)VALUES(#{title},#{content})")intinsert(Blogblog);@Delete("DELETEFROMblogWHEREid=#{id}")intdelete(Integerid);@Update("UPDATEblogSETtitle=#{title},content=#{content},updateTime=CURRENT_TIMESTAMPWHEREid=#{id}")intupdate(Blogblog);@Select("SELECT*FROMblog")List<Blog>selectAll();@Select("SELECT*FROMblogWHEREid=#{id}")BlogselectById(Integerid);}@Mapper注解用于標記接口為MyBatis的映射器接口。importorg.apache.ibatis.annotations.Mapper;@MapperpublicinterfaceUserMapper{}延時符02注解映射@Results:用于映射查詢結果集,可以將查詢結果映射到Java對象。@Results({@Result(property="id",column="user_id"),@Result(property="name",column="user_name"),@Result(property="email",column="user_email")})@Select("SELECTuser_id,user_name,user_emailFROMusers")List<User>getUsers();@Param:用于確保方法參數和映射文件中的SQL語句匹配,避免因參數名不一致而導致的錯誤。當方法有多個參數時,使用@Param注解能夠提高代碼的可讀性。@Select("SELECT*FROMusersWHEREusername=#{username}ANDage=#{age}")UsergetUserByUsernameAndAge(@Param("username")Stringuname,@Param("age")intage);4動態SQL延時符延時符00簡介在實際項目中需要根據不同條件拼接SQL語句,確保添加必要的空格,還要注意去掉多余的逗號。利用動態SQL可以徹底解決類似這些問題。延時符01<if>元素對應Java代碼如下:使用動態SQL最常見的情景是根據條件包含where子句的一部分。<selectid="findBlogWithTitleLike"resultType="demo.Blog">SELECT*FROMBLOGWHEREid>=#{id}<iftest="title!=null">ANDtitlelike#{title}</if></select>Blogtest=newBlog();test.setId(1);List<Blog>blogs=session.selectList("findBlogWithTitleLike",test);System.out.println(blogs.size());test.setTitle("java");blogs=session.selectList("findBlogWithTitleLike",test);System.out.println(blogs.size());延時符02<choose>、<when>和<otherwise>元素若不想使用所有的條件,而只是想從多個條件中選擇一個使用。針對這種情況,MyBatis提供<choose>、<when>和<otherwise>元素,它有點像Java中的switch語句。例如傳入“title”就按“title”查找,傳入“content”就按“content”查找的情形。若兩者都沒有傳入,就返回前10分鐘的BLOG:<selectid="findBlogLike"resultType="demo.Blog">SELECT*FROMBLOGWHEREid>=#{id}<choose><whentest="title!=null">ANDtitlelike#{title}</when><whentest="content!=null">ANDcontentlike#{content}</when><otherwise>ANDcreate_time<CURRENT_TIMESTAMP-600</otherwise></choose></select>延時符03<trim>、<where>和<set>元素<where>元素只會在子元素返回內容的情況下才插入“WHERE”子句;若子句的開頭為“AND”或“OR”,<where>元素也會將它們去除::<selectid="findBlogLikeA"resultType="demo.Blog">SELECT*FROMBLOG<where><iftest="title!=null">title=#{title}</if><iftest="content!=null">ANDcontentlike#{content}</if><iftest="create_time!=null">ANDcreate_time=#{create_time}</if></where></select>延時符03<trim>、<where>和<set>元素與<where>元素等價的為自定義<trim>元素,實現條件插入prefix屬性中指定的內容;其prefixOverrides屬性表示若不滿足條件將會忽略該文本序列。<selectid="findBlogLikeB"resultType="demo.Blog">SELECT*FROMBLOG<trimprefix="WHERE"prefixOverrides="AND"><iftest="title!=null">title=#{title}</if><iftest="content!=null">ANDcontentlike#{content}</if><iftest="create_time!=null">ANDcreate_time=#{create_time}</if></trim></select>延時符03<trim>、<where>和<set>元素<set>元素可用于動態包含需要更新的列,忽略其它不更新的列。比如:<updateid="updateBlog">UPDATEBLOG<set><iftest="title!=null">title=#{title},</if><iftest="content!=null">content=#{content},</if><iftest="create_time!=null">create_time=#{create_time},</if></set>WHEREid=#{id}</update>>延時符04<foreach>元素動態SQL的另一個常見使用場景是對集合進行遍歷,尤其是在構建IN條件語句的時候,比如:<selectid="selectByIDs"resultType="demo.Blog">SELECT*FROMBLOGWHEREidIN<foreachitem="item"index="index"collection="list"open="("separator=","close=")">#{item}</foreach></select>以上<foreach>元素指定一個集合,聲明在元素體內使用的集合項(item)和索引(index)變量。open、close屬性指定開頭與結尾的字符串,separator屬性指定集合項迭代之間的分隔符。延時符04<bind>元素<bind>元素允許創建一個變量,并將其綁定到當前的上下文。比如:<selectid="findBlogByContent"parameterType="demo.Blog"resultType="demo.Blog"><bindname="pattern"value="'%'+_parameter.getContent()+'%'"/>select*fromblogwherecontentlike#{pattern}</select>以上例子定義一個名為pattern的變量,這個變量將在SQL語句中用來作為like查詢條件的模式。value屬性定義pattern變量的值是通過將_parameter對象的getContent()方法返回的值(即查詢參數demo.Blog對象的content屬性)與兩個百分號%字符串拼接而成的。5與Spring整合開發延時符延時符00簡介MyBatis-Spring是一個集成框架,它為MyBatis和Spring提供了無縫的集成。它允許MyBatis代碼在Spring應用上下文中運行,并且能夠利用Spring的強大功能,如依賴注入和事務管理。。MyBatis-Spring通過自動配置,簡化了Mapper接口和SqlSession的創建過程,并將它們作為SpringBean進行管理。延時符01
整合準備工作實現Spring與Mybatis的整合開發,需要做一些必要的準備工作,具體如下所示:在章節4.1.2的pom.xml基礎上增加以下依賴:mybatis-spring、mybatis、spring-jdbc、數據庫驅動等。<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.24</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.24</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency><!--mysql驅動包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency>延時符01
整合準備工作
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-////DTDConfig3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!--配置別名--><typeAliases><packagename="com.demo.po"/></typeAliases><!--配置Mapper的位置--><mappers><mapperresource="com/demo/mapper/xx.xml"/></mappers></configuration>創建mybatis配置文件mybatis-config.xml,mybatis的配置文件中不再需要配置<dataSource>數據源信息,具體如下:延時符01
整合準備工作
<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><context:annotation-config></context:annotation-config><!--定義數據源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property><propertyname="url"value="jdbc:mysql://localhost:3306/test"></property><propertyname="username"value="root"></property><propertyname="password"value="root"></property></bean><!--配置mybatis工廠--><beanid="sqlSessionFacory"class="org.mybatis.spring.SqlSessionFactoryBean"><!--注入數據源--><propertyname="dataSource"ref="dataSource"></property><!--指定核心配置文件--><propertyname="configLocation"value="classpath:mybatis-c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蝎子養殖協議書范本
- 混凝土班長合同協議
- 木工計件合同協議書
- 蔬菜大棚提點合同協議
- 父親房子贈與協議書
- 貨船買賣合同協議書
- 應急物資儲備協議書
- 農村坑塘買賣協議書
- 采伐木材協議書
- 貸款車理賠協議書
- 化糞池應急預案
- 2023年-2024年職業衛生檢測考試題庫及答案
- 2024年全國行業職業技能競賽(電力交易員)備考試題庫大全(濃縮800題)
- 急性ST段抬高型心肌梗死溶栓治療的合理用藥指南
- 《新聞學概論》試題及參考答案
- 華為企業數據架構、應用架構及技術架構設計方法
- 個體診所藥房管理制度制度
- 國開2023秋《電子商務概論》實踐任務B2B電子商務網站調研報告參考答案
- 無障礙改造設備投標方案(技術標)
- 500畝果園規劃設計方案
- 陣發性室上性心動過速臨床路徑
評論
0/150
提交評論