ibatis实战之外部参数映射

ibatis实战之外部参数映射

----------

 

 

有两种方式可以将参数映射到已映射语句中:内联映射外部映射。我们这里要讨论的是外部映射。

 

外部参数映射

使用外部参数映射时,可以指定多达6个属性。如果没有指定其中的某个属性,ibatis就会用反射来尽可能地为其确定合理的值,但是这么做比较费时并且可能不准确

 

参数映射的属性

属性描述
property

设定一个参数时,property属性用于指定JavaBean中某个属性的名字,或者指定作为参数传递给已

映射语句的Map实例的某个键值对的键值。

此名字可以不只使用一次,具体根据它在语句中所需要的次数而定。

例如,假设在一个SQL UPDATE语句中,同一个属性既出现在SET子句中以表示正被更新,又作为键

的一部分用在WHERE子句中,那么这个名字在该已映射语句中就被引用两次。

javaType

设定一个参数时,javaType属性用来显式指定要设置的参数的java属性类型。

通常这个属性可以通过反射从JavaBean属性中推断出来,但是某些映射方式并不能为框架提供这样

的类型。在这种情况下,如果没有设置javaType,而框架又不能通过另外的方式确定类型,就会假定

类型为Object。

jdbcType

设定一个参数时,jdbcType属性用来显式指定参数的数据库类型。一些jdbc驱动程序在进行某些特

定操作时,如果没有显式提供列的类型信息,它们就不能够识别出这些列的类型。有关此问题 ,一个

绝佳的例子就是PreparedStatement.setNull(int parameterIndex,int sqlType)该方法的第二

个参数用于指定类型。如果不指定,一些驱动程序允许其通过发送Types.OTHER或Types.NULL而

被隐式指定。

但是,不能保证所有的驱动程序都表现一致,有一些驱动程序就要求显式指定这个类型。对于这种情况

,ibatis允许通过parameter Map特性元素的jdbcType属性来指定其类型。

通常,jdbcType属性只有当某列允许被设置为空时才是必需的

使用该属性的另一个原因是,当java类型模糊时,可用该属性来明确地指定日期类型。例如,Java表示

时间只有一个Date值类型(java.util.Date),但是大部分SQL数据库通常都至少有三个不同的类型。此时

,你就需要明确地指定数据库表的列的类型是DATE还是DATETIME.

jdbcType属性可以被设置为任何同JDBC的Types类中的某个常量相匹配的字符串值。

nullValue

设定一个参数时,nullValue属性可以根据特性类型被设置为任何有效值

nullValue属性用来指定外部的空值替换。也就是说,数据库写入时,如果在待写入的javaBean属性或

Map键值对中检测到该替换值,就将空值写入到数据库(反过程亦然,即从数据库中读出一个空值时,则将

相应的JavaBean字段或Map键值对的值设为该替换值。)

这样就能允许你在应用程序中对于那些取值不允许为空的java类型(如:int,double,float等类型),设定

一个"神奇"的空值。当这些类型的属性取值包含了匹配的空值时(例如,-9999),就将数据库中写入空,而不

是把这个"-9999"写入数据库。

mode该属性专门用于支持存储过程。
typeHandler

如果想要指定类型处理器(而不是让ibatis根据javaType和jdbcType属性来选择类型处理器),你就可以

指定typeHandler属性,通常,该属性用来提供自定义的类型处理器。

 

 

在ibatis中内联参数映射对于大多数的已映射语句都很好用,但是如果你想要提高性能,或者遇到某些不在预期较难掌控的情况,可能你就需要使用外部参数映射了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值