2011-05-20 11 views
18

SQL Map XML dosyalarının bir kısmı tarafından kullanılan sql fragmanlarını ayrı bir dosyaya koymak istiyorum. Şu anda, bu parçalara sahip <sql> öğeleri, eşleştiricilerden birinde, onları bulmak zor hale getiren <select> gibi diğer öğelerle birlikte.
Sadece birkaç <sql> öğelerini tanımlayan ve bir arabirime uygulama oluşturmak için kullanılmayan bir eşleştiricim olabilir mi? Bu eşleştiricinin doğru ad alanı ne olurdu?
İlk Sql Harita dosyası::MyBatis/iBatis - ayrı bir SQL Map dosyasında yeniden kullanılabilir sql parçaları?

<mapper namespace="com.company.project.dao.???"> 

    <sql id="whereDate"> 
     WHERE date(`time`) BETWEEN #{startDate} AND #{endDate} 
    </sql> 

    <sql id="someOtherSqlFragment"> 
     ... 
    </sql> 

</mapper> 

İkinci Sql Harita dosyası

<mapper namespace="com.company.project.dao.someDao"> 

    <sql id="whereDate"> 
     WHERE date(`time`) BETWEEN #{startDate} AND #{endDate} 
    </sql> 

    <sql id="someOtherSqlFragment"> 
     ... 
    </sql> 

    <select id="getSomeData" 
      resultType="SomeClass" 
      parameterType="DateParam" > 
     SELECT some_column, another_column 
    </select> 

     FROM some_table 

     <include refid="whereDate"/> 

     <include refid="otherSqlFragment"/> 

    </select> 

</mapper> 

böyle unsurları ayırmak istiyorum:

Bu

framents ile SQL Harita dosyasıdır :

<mapper namespace="com.company.project.dao.someDao"> 

    <select id="getSomeData" 
      resultType="SomeClass" 
      parameterType="DateParam" > 
     SELECT some_column, another_column 
    </select> 

     FROM some_table 

     <include refid="whereDate"/> 

     <include refid="otherSqlFragment"/> 

    </select> 

</mapper> 

cevap

25

Bu, üzerinde çalıştığım bir projenin tam olarak yaptığı şeydir. Ortak fragmanlar, ana iBATIS yapılandırma dosyasında bulunan ayrı bir dosyada tanımlanmıştır. Böyle ona başvuru olabilir bizim SQL haritası dosyalarında sonra

<sqlMap namespace="Core" > 

    <sql id="fragmentBasicAuditFieldNames"> 
     CreateDate, CreateUser, 
     UpdateDate, UpdateUser, UpdateCode 
    </sql> 

    .... 

Ve:

<include refid="Core.fragmentBasicAuditFieldNames" /> 

umarım

Biz böyle görünüyordu Core.ism.xml adlı kökünde bir SQL haritası dosyası vardı Doğru sorduğun şeyi anladım!

+0

Teşekkür olabilir! Ayrıca, diğer SQL Map dosyalarını "yüklemek" için MapbatFactoryBean sınıfını mybatis-spring'ten kullandığımı da fark ettim. Ortak parçaları olan dosya herhangi bir yere "yüklenmedi", bu yüzden el ile mybatis yapılandırma dosyasına eklemem gerekiyordu. – prasopes

+1

Çekirdek eşleyici dosyası, mybatis yapılandırma dosyanızdaki tek şey ise, ortak eşleştirici dosyasını yüklemek için SqlSessionFactoryBean'daki 'mapperLocations' özelliğini kullanmak daha mantıklı olabilir. – AngerClown

+2

MyBatis kullanıyorsanız, "mapl" ile "sqlMap" değiştirin. http://code.google.com/p/mybatis/wiki/DocUpgrade3 adresine bakın. Yukarıdaki çözümü açık bir şekilde takip ettim ve diğer konulara girdim. Sonra, MyBatis kullanıyorum ve sqlMap yerine mapper kullanmam gerektiğini anladım. – Srikanth

1

ki, başka eşleştiricisindeki daha bazı

<mapper namespace="Common"> 
    <sql id="idsIn"> 
     ${column} IN 
     <foreach item="id" collection="ids" separator="," open="(" close=")"> 
      #{id} 
     </foreach> 
    </sql> 
</mapper> 

hoşuna kullanabilirsiniz vardır:

<mapper namespace="OtherMapper"> 
    <sql id="someSql"> 
     ... 
     <include refid="Common.idsIn"> 
      <property name="column" value="${column}"/> 
      <!-- OR hardcode: <property name="column" value="id"/> --> 
      <property name="filterPksTable" value="${filterPksTable}"/> 
     </include> 
     ... 
    </sql> 
</mapper> 

Ayrıca, bir göz here