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