首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

对iBATIS的懂得

2012-11-09 
对iBATIS的理解1. iBATIS关于iBATIS,iBATIS是一个Data Mapper 框架,并非一个ORM框架,他利用反射和数据库返

对iBATIS的理解

1. iBATIS

关于iBATIS,iBATIS是一个Data Mapper 框架,并非一个ORM框架,他利用反射和数据库返回结果集的ResetSetMetaData,省去了JDBC传递参数和设置结果集的麻烦。简单是他相对于其他ORM工具的最大特性。他是直接调用你编写的SQL语句或存储过程。他还可以动态构造SQL语句。

?

2. iBATIS的代码生成工具:

???????? abator (http://ibatis.apache.org/abator.html)

???????? http://www.iteye.com/topic/138361

?? 1) 首先配置好 abatorConfig.xml,范例参考官方文档.例如:

??? <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE abatorConfiguration

? PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN"

? "http://ibatis.apache.org/dtd/abator-config_1_0.dtd">

<abatorConfiguration>

? <abatorContext id="DB2Tables" generatorSet="Java2">

??? <jdbcConnection driverstyle="margin: 0cm 0cm 0pt; background: #e0e0e0;">??????? connectionURL="jdbc:db2:TEST"

??????? userId="db2admin"

??????? password="db2admin">

????? <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />

??? </jdbcConnection>

??? <javaTypeResolver >

????? <property name="forceBigDecimals" value="false" />

??? </javaTypeResolver>

??? <javaModelGenerator targetPackage="test.model" targetProject="\AbatorTestProject\src">

????? <property name="enableSubPackages" value="true" />

????? <property name="trimStrings" value="true" />

??? </javaModelGenerator>

??? <sqlMapGenerator targetPackage="test.xml"? targetProject="\AbatorTestProject\src">

????? <property name="enableSubPackages" value="true" />

??? </sqlMapGenerator>

??? <daoGenerator type="SPRING" targetPackage="test.dao"? targetProject="\AbatorTestProject\src">

????? <property name="enableSubPackages" value="true" />

??? </daoGenerator>

??? <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >

????? <property name="useActualColumnNames" value="true"/>

????? <generatedKey column="ID" sqlStatement="DB2" identity="true" />

????? <columnOverride column="DATE_FIELD" property="startDate" />

????? <ignoreColumn column="FRED" />

????? <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />

??? </table>

? </abatorContext>

</abatorConfiguration>

?? 2) 可以将abator.jar加入到项目工程的lib下,然后在eclipse中用Java Application的方式来运行该jar包(eclipse会自动找到Main Class:org.apache.ibatis.abator.api.AbatorRunner)

?加入参数: abatorConfig.xml true

??? 也可以在控制台运行命令: java -jar abator.jar abatorConfig.xml true

?

??? 3. iBATIS的占位符

???? $中间的变量就是直接替换成值的

???? #会根据变量的类型来进行转换

???? 比如articleTitle的类型是string, 值是"标题"的时候

???? $articleTitle$ = 标题

???? #articleTitle# = '标题'

??

?4. iBATIS的使用

????? 使用动态条件查询时候,记得每一个条件表达式,都使用prepend="AND"

????? 而且里面的SQL语句注意 函数名跟()括号之间不要有空格。

????? 编写SQL语句时,因为大多是有abator来生成,注意要对表的default值做处理,以免导致将null值插入到有default值的字段中。

?

??? 5. 尽量使用批处理

????? 批处理和没批处理,相差性能很大。

try {

?????????? getSqlMapClient().startTransaction();

?????????? List<Phone> phones = (List<Phone>) getSqlMapClient().queryForList(

????????????????? "selectPhone");

?????????? int effected = 1;

?

?????????? //getSqlMapClient().startBatch();

?????????? for (Phone ph : phones) {

????????????? getSqlMapClient().update("updatePhone", ph);

?????????? }

?????????? //getSqlMapClient().executeBatch();

?

?????????? getSqlMapClient().commitTransaction();

?

?????????? return effected;

?????? } catch (SQLException e) {

?????????? e.printStackTrace();

?????????? return -1;

?????? } finally {

?????????? try {

????????????? getSqlMapClient().endTransaction();

?????????? } catch (SQLException e) {

????????????? e.printStackTrace();

?????????? }

?????? }

??? 同样的代码,如果没有使用批处理,则更新2000条数据使用了 15,938ms。使用批处理仅需1,188ms。

热点排行