ibatis中的parameterMap和parameterClass的应用详解

属性parameterMap的值等于一个预先定义的元素的名称。parameterMap属性很少使用,更多的是使用的parameterClass
但是使用parameterMap可以提高数据库的访问效率,具体使用如下:
Xml代码  

     <parameterMap class="com.fenxiao.domain.CooperationDo" id="insertCooperationDoByMap" > 
            <parameter property="id"/> 
            <parameter property="supplierId"/> 
            <parameter property="supplierName"/>      
            <parameter property="distributorId"/>      
            <parameter property="distributorName"/>      
            <parameter property="status"/>      
            <parameter property="checkTime" />      
            <parameter property="applyTime" />      
    </parameterMap>
   
    <!-- 使用了map -->
    <insert id="Cooperation.insertCooperationByMap" parameterMap="insertCooperationDoByMap">
       insert into cooperation values(?,?,?,?,?,?,?,?);
       <selectKey resultClass="java.lang.Integer"  keyProperty="id">
        select max(id) from cooperation
    </selectKey>
    </insert>

    
    


domain层
public class CooperationDo {
    
    private int id ;
    private int supplierId ;
    private String supplierName ;
    private int distributorId ;
    private String distributorName ;
    private byte status ;
    private Date checkTime ;
    private Date applyTime ;
    ...........getter setter方法
    }

      
      
DAO类:


    public int insertByMap(CooperationDo cooperationDo);

DAO实现类

public int insertByMap(CooperationDo cooperationDo) {
        return (Integer)getSqlMapClientTemplate().insert("Cooperation.insertCooperationByMap", cooperationDo);
    }

      

      


测试类:
@Test
    public void insertByMap(){
        CooperationDo cooperationDo = new CooperationDo();
        cooperationDo.setDistributorId(4);
        cooperationDo.setDistributorName("aaa4");
        cooperationDo.setSupplierName("bbb4");
        cooperationDo.setSupplierId(44);
       cooperationDo.setStatus((byte)1);
      cooperationDo.setApplyTime(new Date());
      cooperationDo.setCheckTime(new Date());
       int i = cooperationDao.insertByMap(cooperationDo);
       System.out.println(i);
    }

 
现在来具体分析下:
  具体的parameterMap:
Xml代码  

    <parameterMap id=”parameterMapName”   [class=”com.domain.Product”]> 
            <parameter property =”propertyName”  
                    [jdbcType=”VARCHAR”] 
                    [javaType=”string”] 
                    [nullValue=”NUMERIC”]  
                    [null=”-9999999”] 
            /> 
           <parameter…… /> 
           <parameter …… /> 
    </parameterMap> 

                      
                     
Class属性是可选的,Class属性必须是JavaBean或Map实列,Class属性虽是可选的,但推荐大家指定,
Class属性可以用来验证传入的参数的合法性及优化查询

元素:

1.property

       属性property是传给statement的参数对象的Java Bean属性名称。该名称根据需要,可以在statement中多次出现(即在SQL语句SET子句中被更新的属性,也可以作为条件出现在WHERE子句中)。

 

2.jdbcType  

       属性jdbcType用于显式地指定给本属性(property)赋值的数据库字段的数据类型。

       注意! 大多数JDBC Driver只有在字段可以为NULL时需要指定jdbcType属性。因此,对于这些Driver,只是在字段可以为NULL时才需要指定type属性。

       注意! 当使用Oracle Driver时,如果没有给可以为NULL的字段指定jdbcType属性,当试图给这些字段赋值NULL时,会出现“Invalid column type”错误。

 

3.javaType
         属性javaType用于显式地指定被赋值参数Java属性的类名。

 

4.nullValue (要特别关注)

         属性nullValue的值可以是对于property类型来说任意的合法值,用于指定NULL的替换值。就是说,当Java Bean的属性值等于指定值时,相应的字段将赋值NULL。这个特性允许在应用中给不支持null的数据类型(即int,double,float等)赋值null。当这些数据类型的属性值匹配null值(即匹配-9999)时,NULL将代替null值写入数据库。

元素


最后总结列出几点ParameterMap需要特别注意的几个细节:

1.在配置ParameterMap的时候,如果传入的参数对像是元数据类型(int,string etc),那么在配置Parameter元素的时候,property的属性名使用value。通过这种情况主要使用在为存储指定参数的情况下。

2.如果ParameterMap中配置的parameter元素不包含在传入参数对象中(属性或IDictionary对象的一个key,value项),将会产生异常,而不管在statement中有没有用到。

3.在使用parameterMap的extends属性时,它将会继承extends值对应的parameterMap配置,并且会继承它的所有的参数映射,并且顺序是从继承的那配置为基准开始计算。这个在需要用到extends属性的时候要特别注意。

4.在为存储过程传参过程要特别注意,参数映射与存储过程的参数之间的顺序对应要正确。而且必须为提供与存储过程足够的参数(parameter配置足够多),即使存储过程的部分参数已经有默认值了。否则将抛出System.ArgumentOutOfRangeExcept ion异常。

5.正常情况下,应该尽量使用内联参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值