• iBatis把一个表的sqlmap配置的多个xml中。


    其实我们只需要在iBatis配置中添加多一个xml就可以。但值得注意的是,必须把代码生成器生成的基础xml配置在特殊的xml配置之前,否则,特殊的xml使用基础xml中的resultMap时会报错。因为iBatis在初始化的时候,是根据<sqlMaps>的顺序逐个初始化的。

    下面举个例子。虽然不是特殊的xml,但我还是把一个表的sql分开到2个xml中去进行配置:

    下面是iBatis的<sqlMaps>的配置代码:

      <sqlMaps>
        
    <sqlMap resource="Maps/Person_Auto.xml"/>
        
    <sqlMap resource="Maps/Person.xml"/>
      
    </sqlMaps>

    基础xml配置(Person_Auto.xml):

    代码
    <?xml version="1.0" encoding="utf-8" ?>

    <sqlMap namespace="Person" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
      
    <alias>
        
    <typeAlias alias="Person" type="piggyWinFormTemplet.Model.Person, piggyWinForm" />
      
    </alias>

      
    <resultMaps>
        
    <resultMap id="SelectResult" class="Person">
          
    <result property="Id" column="PER_ID" />
          
    <result property="FirstName" column="PER_FIRST_NAME" />
          
    <result property="LastName" column="PER_LAST_NAME" />
          
    <result property="BirthDate" column="PER_BIRTH_DATE" />
          
    <result property="WeightInKilograms" column="PER_WEIGHT_KG" />
          
    <result property="HeightInMeters" column="PER_HEIGHT_M" />
        
    </resultMap>
      
    </resultMaps>

      
    <statements>

        
    <select id="SelectByPrimaryKey" parameterClass="int" resultMap="SelectResult">
          select
          PER_ID,
          PER_FIRST_NAME,
          PER_LAST_NAME,
          PER_BIRTH_DATE,
          PER_WEIGHT_KG,
          PER_HEIGHT_M
          from PERSON
          
    <dynamic prepend="WHERE">
            
    <isParameterPresent>
              PER_ID = #value#
            
    </isParameterPresent>
          
    </dynamic>
        
    </select>

        
    <insert id="Insert" parameterClass="Person" resultClass="int">
          insert into Person (
          PER_ID,
          PER_FIRST_NAME,
          PER_LAST_NAME,
          PER_BIRTH_DATE,
          PER_WEIGHT_KG,
          PER_HEIGHT_M
          ) values (
          #Id:int#,
          #FirstName:varchar#,
          #LastName:varchar#,
          #BirthDate:smalldatetime#,
          #WeightInKilograms:decimal#,
          #HeightInMeters:decimal#
          )
        
    </insert>

        
    <update id="Update" parameterClass="Person" resultClass="int">
          update Person set
          
    <isNotNull property="FirstName" >PER_FIRST_NAME=#FirstName:varchar#</isNotNull>
          
    <isNotNull property="LastName" prepend=",">PER_LAST_NAME=#LastName:varchar#</isNotNull>
          
    <isNotNull property="BirthDate" prepend=",">PER_BIRTH_DATE=#BirthDate:smalldatetime#</isNotNull>
          
    <isNotNull property="WeightInKilograms" prepend=",">PER_WEIGHT_KG=#WeightInKilograms:decimal#</isNotNull>
          
    <isNotNull property="HeightInMeters" prepend=",">PER_HEIGHT_M=#HeightInMeters:decimal#</isNotNull>
          where PER_ID=#Id:int#
        
    </update>
       

        
    <delete id="Delete" parameterClass="int" resultClass="int">
          delete from PERSON
          where PER_ID = #value#
        
    </delete>

      
    </statements>

    </sqlMap>

    特殊xml配置(Person.xml):

    代码
    <?xml version="1.0" encoding="utf-8" ?>

    <sqlMap namespace="Person" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >

      
    <statements>
        
    <select id="SelectAll" resultMap="SelectResult">
          select
          PER_ID,
          PER_FIRST_NAME,
          PER_LAST_NAME,
          PER_BIRTH_DATE,
          PER_WEIGHT_KG,
          PER_HEIGHT_M
          from PERSON
        
    </select>

      
    </statements>
    </sqlMap>

    总结:类似的这种情况不只是出现在这种地方,我们,类似的还有我们的model类。我们加个字段,我们就得用代码生成器对其重新生成。我们最好还得派生出一个子类来继承该自动生成的类,把我们项目中的特殊性代码写在该派生类里,这样,我们用代码生成器生成后可以直接进行替换,不用担心把特殊性代码给覆盖掉。

    遇见了就不要错过
  • 相关阅读:
    成功破解校园网锐捷客户端,实现笔记本无线网卡wifi
    献给正在郁闷的人们
    用友客户通,无法打开登录 'turbocrm' 中请求的数据库。登录失败。
    如何得到cxgrid的当前编辑值
    cxgrid当底层数据集为空时显示一条空记录
    使用nlite将SCSI RAID 阵列驱动整合到系统安装光盘内
    开始菜单的运行没有了
    Delphi代码获取网卡物理地址三种方法
    登录用友通模块时提示:运行时错误'430',类不支持自动化或不支持期望的接口 ...
    CentOS7下安装MySQL Mr
  • 原文地址:https://www.cnblogs.com/Traner/p/2819949.html
Copyright © 2020-2023  润新知