2012-08-14 9 views
6

Ben böyle bir şeydir bir MyBatis mapper dosyasında yazılmış bir sql:Erişim public static final dize

d için yer tutucu değeri sabit ilan olması gerekiyordu
<select id="somesql"> 
    select a,b,c from tbl_name where d = ? 
</select> 

public static final String d = "d_value"; 

nasıl aslında <select> yapı içinde bir parametre geçmeden değerle yer tutucu değiştiririm: bir dosya olarak Constants.java aradı? #{com.pkg.name.Constants.d}'u denedim ama işe yaramadı.

Sert kodlama yok !!!

cevap

2

MyBatis'in kutu davranışı dışında, bildiğim kadarıyla, yapamazsınız.

Bir interceptor for the ParameterHandler yazmak ve orada değerini enjekte istiyorum, ancak parametre işleyici iki yöntemle yalnızca oynayabilir çünkü bu her zaman mümkün olamaz: oldu parametreyi döndürür

  • getParameterObject sorguya gönderilen (bir sabit, bir Dize, bir Harita, özel bir nesne veya hatta bir parametre göndermediğiniz örneğinizin olduğu gibi null olabilir)
  • setParameters Burada deneyebilirsiniz Hazırlanmış ifadede nerede olduğunu biliyorsanız (ki çoğu zaman yapamayacağınız) parametreyi ayarlayın.

Benim önerim, sorgunuza parametre olarak iletmektir. MyBatis'in engelleyici özellikleri çok iyi belgelenmiş değildir, bu nedenle başlangıçtan itibaren doğru çalışma kombinasyonunu elde edemeyebilirsiniz ve değerinden daha fazla sorunla karşılaşabilirsiniz.

3
<select id="getConvenienceStoreList" resultType ="Store"> 
    SELECT * FROM Store 
    WHERE type = ${@[email protected]_STORE} 
    ORDER BY id 
    LIMIT #{start}, #{limit} 
</select> 

Referans: http://qiita.com/ApplePedlar/items/12dc389cc32f3db5557a

+0

Aslında bu işleri !! Ancak, değerin "olduğu gibi" yapıştırıldığını, kaçış olmadığını, tırnak işareti olmadığını unutmayın. Yani, eğer numaralar için kullanmazsanız, en azından alıntı eklemelisiniz. –

+0

Aslında, aktarılan parametrelerin hiçbirini bu şekilde haritalayıcılara değiştiriyoruz, aslında, yalnızca STATIC FINAL sabitlerini kullanmıyoruz, ancak doğrudan aşağıdaki gibi bazı statik yöntemleri de kullanabilirsiniz: ${@foo.product.constant.StoreType @getWhereClausule()} – kensai