ibatis中的parameterMap和parameterClass的应用详解

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

属性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.正常情况下,应该尽量使用内联参数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38198.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注