




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1.MyBatisCRUD(掌握2.MyBatis的對象(掌握3MyBatis使用細節(jié)(掌握ORM對象關系映射(ObjectRelationalMap,簡稱Hibernate:目前最流行的ORM框架.設計靈巧,性能一般(自己去控制性能,不是很好控制),文檔jdbc也能實現(xiàn)對象實體和數(shù)據(jù)庫關系的映射.那就是采用硬編碼方式,為每一種可能的數(shù)據(jù)庫操作提供單獨的方法。也就是各種Dao(UserDaoDeptDao等)。Sql操作方式(jdbc進行封裝)(mybatis的實現(xiàn)方式ORMMyBatisMyBatis本是apache的一個開源項目iBatis,2010年這個項目由apachesoftwarefoundation遷移到了 code,并且改名為MyBatis。 MyBatis使用簡單的XML或注解用于配置和原始映射將接口dao和Java的POJO( inOldJavaObjects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄。MyBatis9jarMyBatisJavaJavajar包。因此,不只jar包。jar包之前,我們得先說一下,MyBatisJDBC的時候說過:要操作數(shù)據(jù)庫,一定了導入相應的數(shù)據(jù)庫驅(qū)動包。JDBCjar包(JDBC第一天的包與依賴包Mybatis的包,在外層product表即可:publicclassProduct{publicclassProduct{ Longid;privateString//privateStringprivate privateDouble//privateDoubleprivateDoubleprivateLongdir_id;//getter與}*publicinterfaceIProductDaovoidsave(Productvoidupdate(Productvoiddelete(LongProductget(LongList<Product>}MyBatis配置文MyBatis了。但是問題來了,怎么用呢?50多頁,但是已經(jīng)足夠咱們學習了。先來入個門吧:開始,除了介紹什么是MyBatis之后,就在說一個對象那SqlSessionFactoryXML中構建好了,大概介紹完畢后,我們可以開始準備配置的xml文件了MyBatis-Config.xmlenvironments里面兩個內(nèi)容(transactionManager,dataSource)dataSourcedriver,url,username,password(連接數(shù)據(jù)庫的最小單位)<!--環(huán)境們(很多環(huán)境的意思<environments<!-一個環(huán)境id:id--<environment<!-事務管 --<transactionManagertype="JDBC"<!--數(shù)據(jù)源,連接池type(POOLED):MyBatis自帶的連接池<dataSource<!--連接數(shù)據(jù)庫的參數(shù)<propertyname="username"value="root"<propertyname="password"value="admin"<!--這個mappers代表的是相應的ORM映射文件<mapper 現(xiàn)在咱們的關于數(shù)據(jù)庫連接信息已經(jīng)在配置文件(XML)中,但是時候,我們還是會把配置文件的<!--引入Properties文件<properties<environments<environment<transactionManagertype="JDBC"<dataSource<!--根據(jù)keyproperties中的value值<propertyname="url"value="${db.url}"<mapper 但是總是覺得,少了點什么?是什么呢?mappers,它指向了一個映射文件。映射文件在哪?MyBatisSQL語句么?SQL語句又在哪里?xmlxml的約束中,咱們講過,當有約束的時候,xml就會有提示。xmlschemadtd約束Eclipse中,我們可以找到相應的約束文件,然后配置到自己本<?xml<?xmlversion="1.0"encoding="UTF-<!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN" <!-這個Mapper的主要功能就是寫sqlnamespace:(用來確定唯一)以前這個是可以不加的,namespace的值,規(guī)則的:映射文件XxxMapper.xml所在的包 <mapper <!-select:id:sql以后我們確定唯一,也就是找sqlnamespace例: parameterType:傳入的參數(shù)類型long:Long_long:long具體的對應請參見文檔)resultType:結果類型(第一條數(shù)據(jù)返回的對象類型)自己的對象一定是全限定類名<selectid="get"parameterType="long" selectselect*fromproductwhereid= 級XxxMapper.xml(Xxx代表的是實體類名稱namespace的名稱為了確定唯一性,請大家根據(jù)我的要求取名 .Product/ .ProductMapper MyBatis咱們,需要通過它去拿到一個SqlSession對象(相當于JDBC的連接)SqlSessionSql文檔從XML中構建SqlSessionFactory這一章中,除了配置的xml,在上面我們還可SqlSessionFactory工廠。中獲取SqlSessionsql的代碼。SqlSessionFactory:importimportimportorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;publicclassMyBatisUtils//保證SqlSessionFactoryprivatestaticSqlSessionFactorySqlSessionFactory類似于JPA的EntityManagerFactory,Hibernate的SqlSession類似于JPA的EntityManager,Hibernate的statictryReaderReaderreader=Resources.getResourceAsReader("MyBatis-Config.xml");sqlSessionFactory=newSqlSessionFactoryBuilder().build(reader);}catch(Exceptione){"+}}//publicstaticSqlSessiongetSession()return}}SQL接收的參數(shù)!【課堂分析】publicProductget(Longid){SqlSessionsession=null;try{session=//兩個參數(shù):mappernameSpace+id}catch(Exceptione){thrownewRuntimeException("get方法出錯:}finallyif(session!=null)}}}}publicpublicclassProductDaoTestIProductDaoproductDao=newProductDaoImpl();publicvoidtestGet()Productproduct=productDao.get(1L);}}publicList<Product>getAll(){SqlSessionsqlSession=null;try{sqlSession=returnsqlSession.selectList(NAME_SPACE+}catch(Exceptione){thrownewRuntimeException("ProductDaoImpl.get出現(xiàn)異常:}finallyif(sqlSession!=null){}}}<!--<!--返回類似仍然是 類--<selectid="getAll"resultType="cn.itsource.mybatis.day1._1_ <selectid="getAll"resultType="cn.itsource.mybatis.day1._1_ select*fromproductpublicvoidtestGetAll()List<Product>list=productDao.getAll();for(Productproduct:list){}}publicvoidsave(Productproduct){SqlSessionsqlSession=null;try{sqlSession=MyBatisUtils.getSession();sqlSession.insert(NAME_SPACE+"save",product);}catch(Exceptione){thrownewRuntimeException("ProductDaoImpl.get出現(xiàn)異常:}finallyif(sqlSession!=null){}}}<!--<!--voidsave(Productproduct);--<insertid="save" insertinto publicvoidtestSave()Productproduct=newProduct(); }MyBatis細節(jié)一章的拿到返回主鍵publicvoidupdate(Productproduct){SqlSessionsqlSession=null;trysqlSession=MyBatisUtils.getSession();sqlSession.update(NAME_SPACE+"update",product);}catch(Exceptione){thrownewRuntimeException("ProductDaoImpl.get出現(xiàn)異常:}finallyif(sqlSession!=null){}}}<!--<!--voidupdate(Productproduct);--<updateid="update" updateproductsetwherepublicvoidtestUpdate()Productproduct=productDao.get(1L); product=productDao.get(1L);}publicvoiddelete(Longid){SqlSessionsqlSession=null;try{sqlSession=MyBatisUtils.getSession();sqlSession.delete(NAME_SPACE+"delete",id);}catch(Exceptione){}catch(Exceptione){thrownewRuntimeException("ProductDaoImpl.delete出現(xiàn)異常:}finallyif(sqlSession!=null){}}}<!--<!--voiddelete(Longid);--<deleteid="delete"parameterType="long">deletefromproductwhereid=#{id}publicvoidtestDelete(){Productproduct=productDao.get(1L);}CRUDMyBatis的時候經(jīng)常出現(xiàn)的點。希望大家引起重視。出現(xiàn)問題的MyBatis中出的錯都在這里。Sql寫錯,這個應該還好找.修改了數(shù)據(jù),記得要寫Sql的不需要全部一致(如添加不一定必需使用insert),但是必須是成對兒出現(xiàn)的,就在開發(fā)的時候,要邊做邊測試。在某一步出現(xiàn)錯誤后,刪除新加的代碼看有沒有問題,如果刪MyBatis三大對SqlSessionFactorySqlSessionFactory類似于JPA的EntityManagerFactory,Hibernate的SessionFactorySqlSession類似于JPA的EntityManager,Hibernate的Session建造者模式:我們最后拿到的這個對象是非常復雜的用這個建造者就它先為我們把這些復雜的代碼這個類可以被實例化,使用和丟棄。一旦你創(chuàng)建了SqlSessionFactory后,這個SqlSessionFactoryBuilderSqlSessionFactoryBuilder實例的最佳方式是不需要保持它一直存在,XML解析資源,因為還有更重要的事情要做。SqlSessionFactory的最佳范圍是應用范圍。SqlSessionFactory的生命周期。SqlSession實例。SqlSession的實例不能被共享,也是線程不安全也絕不能將SqlSession實例的放在任何類型的管理范圍中,比如Serlvet架構中的HTTPSqlSession,然后返回響應,就可以關閉它了。Session很重要,MyBatisidinsertid值。<!-<!-useGeneratedKeys:是否需要主鍵<insertid="save"parameterType="cn.itsource. >insertintoproduct values publicvoidtestAdd()Productproduct=newProduct(); },,cutoff=0.8,添加之后,有id:Product[id=26,productName=000000,brand=大力牌,cutoff=0.8,dir_id=1]r=東莞供應商salePrice=60.0r=東莞供應商,salePrice=60.0,Log4jMyBatis的很多時候,我們需要把日志打印出來,幫助我們進行分析與排錯。特別是大家現(xiàn)MyBatis的日志打開。SQL語句,可以看到我們傳遞的參數(shù)。MyBatisLog4jLog4j簡介(TRACE:詳細(建議開發(fā)的時候用)Debug:System.out.printInfoJPA打印sql等級Error:錯誤,出現(xiàn)異常(建議正式環(huán)境)#全局配置:先配置一個日志的跟,這個級別是ERRORlog4j.rootLogger=ERROR,stdout#全局配置:先配置一個日志的跟,這個級別是ERRORlog4j.rootLogger=ERROR,stdoutlog4j.appender.stdout.layout.ConversionPattern=%d%p[%c]-%m%ntyp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度汽車維修行業(yè)人才引進與培養(yǎng)合同
- 2025年度環(huán)衛(wèi)工人勞動爭議調(diào)解與處理合同
- 二零二五年度農(nóng)村宅基地租賃協(xié)議(農(nóng)村文化產(chǎn)業(yè)發(fā)展)
- 2025年度高級建造師聘用與技術咨詢服務協(xié)議
- 二零二五年度商業(yè)企業(yè)購銷合同印花稅稅率調(diào)整與稅收籌劃實務
- 二零二五年度藝人經(jīng)紀與全產(chǎn)業(yè)鏈合作合同
- IT基礎設施建設項目投資合同
- 鄉(xiāng)村旅游資源開發(fā)利用合作協(xié)議
- 電梯采購工程合同
- 文化旅游項目開發(fā)合作框架協(xié)議
- 2025年第六屆(中小學組)國家版圖知識競賽測試題庫及答案
- GB/T 26436-2025禽白血病診斷技術
- 體育場館工程施工組織設計
- 春季校園常見傳染病及預防措施培訓課件
- 國際標準下的AI技術應用-深度研究
- 2025-2030年城市軌道交通運營行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025年江西生物科技職業(yè)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 《信息技術(拓展模塊)》高職全套教學課件
- 2025天津市安全員《B證》考試題庫
- DB37T-住宅小區(qū)供配電設施建設標準編制說明
- 食品飲料行業(yè)酒類2025年度策略報告:拐點漸近行穩(wěn)致遠
評論
0/150
提交評論