网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

ibatis学习资料

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:网学会员为广大网友收集整理了,ibatis学习资料,希望对大家有所帮助!


    iBATISSQLMaps入门教程Page1of10iBATISSQLMaps入门教程ibatis简介本文是初学者的快速入门教程,涵盖了SQLMap的一个简单而典型的应用。每个主题更详细的信息可以参考《iBatisSQLMaps2.0开发指南》。本文是《iBatisSQLMapsTutorial》的中文版,仅供读者参考。最权威的以ClintonBegin的官方文档为准,它可以从ibatis网站下载。如果中文翻译有错误,请通知译者(email:toleu@21cn,Blog:starrynight.blogdriver/)。准备使用SQLMapSQLMap架构能应用于设计不好的数据库模型甚至是设计不好的对象模型。尽管如此,您在设计数据库模型和对象模型时,还是应该遵循最佳的设计原则。这样,您会获得更好的性能和更简洁清晰的设计方案。设计最容易开始的地方是分析应用的业务逻辑。分析什么是应用的业务对象,什么是数据模型以及两者之间的关系。作为快速入门第一个例子,我们使用一个简单的JavaBeanPerson类。Person.javapackageexamples.domain;//importsimplied….publicclassPerson{privateintid;privateStringfirstName;privateStringlastName;privateDatebirthDate;privatedoubleweightInKilograms;privatedoubleheightInMeters;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}//…let’sassumewehavetheothergettersandsetterstosavespace…}Person类有了,如何将Person类映射成数据表呢?SQLMap对JavaBean和数据表之间的关系没有限制,如一个数据表映射成一个JavaBean,或多个表映射成一个JavaBean,或多个JavaBean映射成一个数据表等。因为使用SQLMap您可以充分发挥SQL语句的全部潜力而很少限制。下面这个例子,我们使用一个简单的表,将一个表映射成一个JavaBean,JavaBean和表是一对一的关系。Person.sqlCREATETABLEPERSON(PER_IDNUMBER(5,0)NOTNULL,PER_FIRST_NAMEVARCHAR(40)NOTNULL,
     PER_LAST_NAMEVARCHAR(40)NOTNULL,PER_BIRTH_DATEDATETIME,PER_WEIGHT_KGNUMBER(4,2)NOTNULL,PER_HEIGHT_MNUMBER(4,2)NOTNULL,PRIMARYKEY(PER_ID))SQLMap的配置文件现在准备好了学习环境,让我们从学习SQLMap的配置文件开始,配置文件是SQLMAP的配置信息统一设置的地方。SQLMap配置文件是XML文件,我们可以它设置各种属性,JDBCDataSource和SQLMap。在配置文件中,可以方便地统一配置DataSource不同的实现。SQLMap框架包括DataSource的iBATIS实现:SimpleDataSource类,JakartaDBCP(Commons)和可通过,J(java)N(naming)D(directory)I(interface)上下文查找的DataSource(即应用服务器中的DataSource)。详细的使用方法在以后的章节讨论。在本例中,我们使用JakartaDBCP。对于上面的例子
    ,配置非常简单,如下所示:SqlMapConfigExample.xmlibatisClintonBegin著刘涛(toleu@21cn)译iBATISSQLMaps入门教程Page4of10
    
SqlMapConfigExample.properties#Thisisjustasimplepropertiesfilethatsimplifiesautomatedconfiguration#integrationtoolsfordifferentenvironments…etc.)#Thesevaluescanbeusedinanypropertyvalueinthefileabove(e.g.“${driver}”)#Usingapropertiesfilesuchasthisiscompletelyoptional.driver=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@localhost:1521:oracle1username=jsmithpassword=testSQLMap的映射文件现在DataSource已经配置好了,并且有了统一的SQLMap配置文件,我们还需要SQLMap的映射文件。映射文件包括SQL语句和参数对象和结果对象的映射。继续上面的例子,我们从一个简单的查询语句开始,为Person类和PERSON表之间创建一个SQLMap映射文件。Person.xmlSELECTPER_IDasid,PER_FIRST_NAMEasfirstName,PER_LAST_NAMEaslastName,PER_BIRTH_DATEasbirthDate,PER_WEIGHT_KGasw
    eightInKilograms,PER_HEIGHT_MasheightInMetersFROMPERSONWHEREPER_ID=#value#上面的例子是SQLMap最简单的形式。它使用了SQLMap框架中一个特性,根据匹配的名字将ResultSet的列映射成JavaBean的属性(或Map的key值)。#value#符号是输入参数,该符号表示使用了基本类型的包装类作为输入参数(即Integer,但不仅限于此类型)。ibatisClintonBegin著刘涛(toleu@21cn)译
     iBATISSQLMaps入门教程Page6of10以上的方法虽然很简单,但有一些限制,无法指定输出字段的数据类型,无法自动地在结果对象中载入相关的信息(即JavaBean无法使用复杂的属性);以上的方法对性能还有轻微的不利影响,因为需要读取ResultSetMetaData的信息。使用resultMap,可以克服以上的不足,但现在只需要一个简单的例子,以后我们再转向其他不同的方法(无须修改Java代码)。大多数的应用不仅需要从数据库中读取数据,还需要修改数据。我们已有了一个SELECT查询语句的mappedstatement简单例子,下面看看INSERT,UPDATE和DELETE的mappedstatement什么样子。幸运的是,它们其实没什么区别。接下来,我们完成PersonSQLMap其他部分,以实现修改数据的功能。Person.xmlSELECTPER_IDasid,PER_FIRST_NAMEasfirstName,PER_LAST_NAMEaslastName,PER_BIRTH_DATEasbirthDate,PER_WEIGHT_KGasweightInKilograms,PER_HEIGHT_MasheightInMetersFROMPERSONWHEREPER_ID=#value#INSERTINTOPERSON(PER_ID,PER_FIRST_NAME,PER_LAST_NAME,PER_BIRTH_DATE,PER_WEIGHT_KG,PER_HEIGHT_M)VALUES(#id#,#firstName#,#lastName#,#birthDate#,#weightInKilograms#,#heightInMeters#)UPDATEPERSONSETPER_FIRST_NAME=#firstName#,PER_LAST_NAME=#lastName#,PER_BIRTH_DATE=#birthDate#,PER_WEIGHT_KG=#weightInKilograms#,PER_HEIGHT_M=#heightInMeters#
     WHEREPER_ID=#id#DELETEPERSONWHEREPER_ID=#id#使用SQLMap框架编程好了,我们完成了所有的配置文件和映射文件,就剩下的应用的编码工作了。首先要设置SQLMap,读入刚创建好的SQLMapXML配置文件。为简化这个工作,可以使用SQLMap架构中提供的Resources类。Stringresource=“com/ibatis/example/sql-map-config.xml”;Readerreader=Resources.getResourceAsReader(resource);SqlMapClientsqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);以上的SqlMapClient对象是线程安全,并且应持久生存。对于一个特定的应用,只需进行一次SqlMap配置。因此,它可以作为基类的一个静态对象(即DAO对象的基类),或者,如果您想让它有更大的作用范围,可以把它封装在方便使用的类中。例如:publicclassMyAppSqlConfig{privatestaticfinalSqlMapClientsqlMap;static{try{Stringresource=“com/ibatis/example/sql-map-config.xml”;Readerreader=Resources.getResourceAsReader(resource);sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);}catch(Exceptione){//Ifyougetanerroratthispoint,itmatterslittlewhatitwas.Itisgoingtobe//unrecoverableandwewillwanttheapptoblowupgoodsoweareawareofthe//problem.Youshouldalwayslogsucherrorsandre-throwtheminsuchawaythat//youcanbemadeimmediatelyawareoftheproblem.e.printStackTrace();thrownewRuntimeException(“ErrorinitializingMyAppSqlConfigclass.Cause:”+e);}}publicstaticSqlMapClientgetSqlMapInstance(){returnsqlMap;}}从数据库读取对象既然SqlMap对象已完成初始化,就可以方便地使用它了。首先,我们用它从数据库中读取一个Person对象。(在本例中,假设PERSON表中已存在10条记录,PER_ID从1到10)。要从数据库中得到一个Person对象,只需要SqlMap实例,mappedstatement的名字和一个
     PersonID号。让我们读入PER_ID是5的Person对象。…SqlMapClientsqlMap=MyAppSqlMapConfig.getSqlMapInstance();//ascodedabove…IntegerpersonPk=newInteger(5);Personperson=(Person)sqlMap.queryForObject(“getPerson”,personPk);…把对象写入数据库现在已有了一个从数据库中读出的Person对象,接着修改Person对象的height和weight属性,并将它写入数据库。…person.setHeightInMeters(1.83);//personasreadfromthedatabaseaboveperson.setWeightInKilograms(86.36);…sqlMap.update(“updatePerson”,person);…要删除这个Person对象,也很容易。…sqlMap.delete(“deletePerson”,person);…类似地,也可以创建一个新的Person对象。PersonnewPerson=newPerson();newPerson.setId(11);//youwouldnormallygettheIDfromasequenceorcustomtablenewPerson.setFi
    rstName(“Clinton”);newPerson.setLastName(“Begin”);newPerson.setBirthDate(null);newPerson.setHeightInMeters(1.83);newPerson.setWeightInKilograms(86.36);…sqlMap.insert(“insertPerson”,newPerson);…附录:容易出错的地方本附录是译者添加的,列出了初学者容易出错的地方,作为完成快速入门课程后的学习笔记,可以让初学者少走些弯路。仅供参考。1)在parameterMap和resultMap中,字段数据类型是java.sql.Types类定义的常量名称。常用的数据类型包括BLOB,CHAR,CLOB,DATE,LONGVARBINARY,INTEGER,NULL,NUMERIC,TIME,TIMESTAMP和VARCHAR等。2)对于数据表中NULLBALE的字段,必须在parameterMap和resultMap中指定字段的数据类型。3)对于数据类型是DATE,CLOB或BLOB的字段,最好在parameterMap和resultMap中指定数据类型。4)对于二进制类型的数据,可以将LONGVARBINARY映射成byte[]。
     5)对于文本类型较大的数据,可以将CLOB映射成String。6)JavaBean必须拥有缺省的构造器(即无参数的构造器)。7)JavaBean最好实现Serializable接口,以备应用的进一步扩展。
    
    
  • 上一篇资讯: ibatis整理资料
  • 下一篇资讯: ibatis学习笔记之实例
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师