ibatis和mybatis的区别

上传人:yx****d 文档编号:158191358 上传时间:2022-10-03 格式:DOC 页数:12 大小:64.50KB
收藏 版权申诉 举报 下载
ibatis和mybatis的区别_第1页
第1页 / 共12页
ibatis和mybatis的区别_第2页
第2页 / 共12页
ibatis和mybatis的区别_第3页
第3页 / 共12页
资源描述:

《ibatis和mybatis的区别》由会员分享,可在线阅读,更多相关《ibatis和mybatis的区别(12页珍藏版)》请在装配图网上搜索。

1、ibatis和tis的区别作者:iro1 概述这个区别不是很大,最主要的区别就是ybatis简化了编码的过程,不需要去写dao的实现类,直接写一个d的接口,再写一个l配置文件,整个mybatis就配置好了,也就是数据库就连接好了,然后在servce里面直接调用do就可以了,但是ibtis则不可以,必须要写do的实现类,再写个etrneSqMaplientepla()。eryForList()神马的,bais是ibatis的升级版本。还有些区别就是l里面的ql语句的写法有些小变化,但是不大。2 Mybatis实现了接口绑定,使用更加方便。在ibtisx中我们需要在AO的实现类中指定具体对应哪个x

2、l映射文件, 而ybas实现了A接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。这可以说是Mati最重要的改进。2.1 举例2.1.1 Mbats的使用方法:只需要如下做好SBokMappr.xl、SBoMper,就可以直接在rices中直接调用IBokMape中的接口方法,该方法就在xml中定义的i,如finAlBok,这个方法名称在BokMapper和SBkMapperxml中必须完全一致!2.1.1.1 SBokMape。xmlmappnaespaccomysc。b2c。bok.mappr。IBokapper第一个区别:与mapper文件名称完全相同

3、,并且是一一对应的,同时中定义的id与mapper接口中定义的方法名称必须是完全一致的”retMa type”Sook” isooReutMapeslt roprty=total” com=total” /rltrorty=price” colmn”prie /esul rorty=”isbn” oumn=”isbn /reslt ropulish” oumnlher” EET * fom bo;/seeinrt idaveoo parmtTpe=”SBook”selcteykeyoery”d esultTe=it” orde=”BEFORELEC LAS_INST_ID() S AE/sel

4、ectKeyINSER INTO sbok( itle,athor,totl,prie,isbn,pulier)VALUS(title,#author,#oal,prc,#isbn,publsher) seect i=findokByIdparmeteTye”int rultMpsokRsultMapSELECT from sookwhere i=#id ;/ee elete d=dleeBoo”parameterType=”nt eete frosbook erid #id /delte /mper2.1.1.2 ISBokMaper:packge com.ksc。b2c。bos.apper

5、;mrtjva。utilList;iptcm。ykc.boks。oo.Book;pblic ierfce IBokMapper * 添加一本图书至数据库中 parabok * 图书对象 throw unimeExceptin /public void aeBok(SBk ook) ;/ *删除图书信息* param i 编码 thrw RuimeExction*/public vod dlteBook(n id) throws Runtiexption; 通过出版社查找此出版社出版的所有图书列表 param pbisher* 出版社名称*return 返回特定出版社下的所有图书列表 * hro

6、ws RuntimExcpn /publicit fdAllBoo();* 通过ID查找特定的图书 * pam id 图书的I号 etun返回此ID对应的图书信息 * trws RunteExepin pulic SBok fndBooByd(in i)hrowsRntimExctio;2.1.1.3 SBookServicspaageom。yc。b2c.bos.serice.ipl;iprtjava。utl。List;import org.sprigramork.bans。factranotationAwre;import r.rnfrmwrktereotyp.Servi;pt comyks

7、c.b。bos.mpper.Bookapper;import co.s.b2c。book。oSok;import com.kcb2.oervi。ISBookSrvies;ervie(”okervices”)upressWarngs(”unceck”)publiclass Sookerices mplemen ISookSeicesAutowire ISookaper ookMape;publc Lis fndllBk() rows RutimeExceptn etu okMpr。findAlBook();puicSBook getBoBySB(Sting isbn) throwsRuntiep

8、tio etr bookMapp。findBooByISN(sn);public LiBoogtookyPbiher(trng puler)thros RuntimEcpton rn booMaper.findBooksByPubsher(lsr);pbc vod eveBok(it id)hrosRuntimeptin ookMappr.eleoo(i);public vod aveBo(Book book) trows RnteEceton bookMaer.veBook(boo);public vod updaook(SBok oo) thwsuneExcption boMapper。d

9、atBook(ok);ublcSBook getookById(int id) tow Runimeceptin rurn bokappr.finookByd(id);2.1.2 batis的使用方法需要四个文件:Usersxml、erDO、UserOIl、erSriceImpl在o中调用必须使用Usrs_AT是users.xml中ueryUersByd是users.xml中另外iis还需要增加一个qMapConfig。xm,这跟hibenae一样,需要包含相关的smp的ml文件的路径2.1.2.1 Uss。xml需要在sqlMapConfig.xml文件注明全路径 tyeAlias ali=

10、”User type”er”!- 1、返回一个ResultSet2、遍历ResultSet获取esultMa里面指定的字段,封装到对象里面 !- 实体的属性字段(eter/setter对应), olumn对应的是表的字段 - result rpery”srnameou=ser_name”/ esult t=paswordcolumnasord/ /resultMap !- 如果对于关联对象的查询,不管是一对多还是多对一,都是通过resultap的resul封装 resultap cass=esd=userllMap resut poperty coun=i” esul roprty=”pass

11、word olumassword/ rsu oprtyage column=”user_ag/ !- sql标签定义多个sl语句可能用到的公共字段- sqlid=inertCoun uer_name, pasword, ur_gsql sql d=insetSqlsem#, pasor, #a# /sql!- pramerCls:定义的ist的时候参数所对应的类的全路径 ,可以使用别名#:如果传递的是实体的话,对应的是实体里面加了geer/seter方法的属性 inset id=avesers” pramtla=Userert into tuse( ) vlus ( include rfid=

12、isetSq”/ ) /inset sel idqueyUsersByd rsutMap=erap” paametClass=int” seec in refi=”useColmn rom uerwhee id =id select cud refid=”userolumn/ frm t_useselect slcticde refid”userClm”/fro tur u hereu_am = uername andpassword = passwordslct se id=”uyUer” sltClaUserameClas=”int seletcue refd”userColumn”fo

13、tuser whedid /elect el* from thouse wheesrid#i elete fomt_uer here d# /ele/sqMap2.1.2.2 UsrDAOpacgr.dao.spi;import ava。uti.List;impes;pbicinterfce UserAO * 保存用户 * param user:需要保存的用户对象值 */pul void e(Use user);* 查询所有用户列表 * retur 所有用户数据*/li Lst queAll();/* 根据I查询用户数据 para id:要查询的用户D*retun/uic UsersqueBy

14、Id(Igr d);* 更新用户数据 param er/pubic vod uate(Useruer);/* 删除用户数据 * param:被删除的用户D*/pulivod dlete(int i);2.1.2.3 UeDAOImlpckaero;imoa.utilLt;ipor ava。anntatin.PostCnsuct;imort jva。annoation.Resor;iort org.sinaework.ormbt.suppotSqlMaCentaoSppot;imort rg.prinramewrk.tpRpostory;iport ogsrngramework。tacion。a

15、nnoati。Tansional;imporDAO;imprer;imortm。aissqmapclient.qlapCin;ReitryTransacionapublc as UerDAOIml exteds qlaplietaoSupor impments serDO Resourc(nme = slMpClient)privateSlMapCient lMapClit;Potonstrucpblic oid iniSqMpCin() uper.setSqlMaCliet(sqMapCient);rridepublic vidsve(Ueruser) / satementNam:nmesc

16、e+。” +sper。etSqlapCletTeplate()。inr(Use_PAT.sveUsrs, use);Ovrriepulic ListUsers eryAl()retrsupr.getSlMaClienTemlte().queryoList(Users_PA。queryAllUsersLst”);Overiepublc Uses qurById(Integer id)retur (User)e。getSqMaplntemplate()。quebc(ss_PLAT。queryUey”,d);verridepubli vd pat(sers uer)uer.getSqlMapClie

17、ntTemplate()。update(”sersPLT。upteUrs, usr);verridepubl voiddelete(int id) / D Auto-generted mthodtubsuperetSlMpClientTempate().elete(User_PA。leUsersByd, id);2.1.2.4 UserSvceImplpackger.servic;ipt jaa.uti.List;port org.pnrmewok。beans。facty。nnaon。Auowied;ipot orgspringraewok.treotye。Srvce;imprerDO;mpo

18、er;mporrervie;Serviepuic css serServiceIpl imlments UsSrvi Autowiredivte erDAO usrAO;publi sergetUseDAO() reurn useDAO;public oid serAO(UserDOuserDAO) eDAO = uerDAO;Overridpblic void sve(User user)rDAO.sa(ur);Oridepblic LitUser queryAll()rtrerDO。qeyAll();Overrideublic Use queById(Integeri) returerA.

19、queryByI(d);Oveidepublic vod udat(Users user) erDO.date(user);ridepbli voidee(it i) erDA.delte(id);2.1.2.5 sqlMCofig.ml?xlveron1. eoingUF8” ?!OCTYE sqlMapCoig PUBLC -/DD LMa onig 2。/EN sqlaoni setg cacheModelnabled=true hncentnabld=”true”lazLoadiabled=tru” maxReuess=2” axSessns=”maxTanactio=”50 useS

20、atementNampaces”tr” / sqlMa esoure=”pper/useUerxml/ sqlMp resource=pper/user/hose。xl lMap resouce=”mapper/use/Menuml/注意:虽然Mybts支持在接口中直接使用annottion的配置方式来简化配置,不过,强烈建议仍然使用xml配置的方式.毕竟annoation的配置方式功能有限且代码入侵性太强。使用xm配置方式才能体现出Mbts的优势所在 3 对象关系映射的改进,效率更高 相信很多在使用iati。的朋友并没有通过ibatis的xml映射文件来实现对象间的关系映射。其实也确实没有必

21、要那么做,因为is2。x采用的是“嵌套查询”的方式将对象之间的关系通过查询语句的直接拼装来实现,其效果和在DAO或Seic中自行封装是一样的。不过这种方式存在“+1查询问题。 概括地讲,N+1查询问题可以是这样引起的:l 你执行了一个单独的QL语句来获取结果列表(就是1)。l 对返回的每条记录,你执行了一个查询语句来为每个加载细节(就是)。这个问题会导致成百上千的SL语句被执行.这通常不是期望的。而在Mybtis中,除了兼容bats2x中的“嵌套查询”方式外,还提供了直接“嵌套结果”的方式,其效果相当于直接通过一句sl将查询出的dt对象自动封装成所需的对象。具体实现方法请自行参考ybais官方

22、使用手册,不在此累述. 不过实际上这一改进所带来的好处也是很有限的。因为这一方式在使用分页的时候并不起作用,或者说嵌套对象的结果集是不允许进行分页的。这一点在Mybais框架中已经做出了明确的限制(org。pae.ti.executr。sutset.NedRutetHande里34行),而实际项目中需要分页的情况又特别多 仔细一想,一对多映射确实不能通过配置文件来分页,因为这时查询出的记录数并不等于实际返回对象的siz,不过一对一映射为什么也不允许就不太明白了。可能是因为一对一是一对多的特例,而在设计框架的时候并没有考虑去处理或是难于处理这一特例吧。 4 Myais采用功能强大的基于GNL的表达式来消除其他元素. 熟悉sts2的人应该对GN表达式不会感到陌生,MyBtis采用OGN表达式简化了配置文件的复杂性,使用起来更简洁。补充:比较遗憾的是,Myati的分页继续沿用iatis2。的逻辑分页方式,依赖于JC的规范。大数据量时会出现性能问题,要想实现物理分页还得自己想办法改了。 文中如有不足,请您指教!12 / 12

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!