簡體   English   中英

為什么此WHERE子句在MyBatis映射器+ Spring3應用程序中起作用?

[英]Why does this WHERE clause work in my MyBatis mapper + Spring3 application?

我在示例中找到了以下代碼,它可以正常工作。 但是我不知道為什么。

我的問題是:

  • 如何將來自getDrugsWithAlert(int count)的映射分配給#{maxrowcount} (我可以在其中放入任何內容: #{maxrowcount}#{mcount} ,這似乎無關緊要);

  • 為何/為什么if test="_parameter != null and _parameter > 0起作用?

我的DAO界面如下所示:

@Repository
public interface DrugMasterDao {
    public List<Drug_Master> getDrugsWithAlert(int count);
}

我的映射器文件如下所示:

<mapper namespace="org.mydb.formulary.drugmaster.dao.DrugMasterDao">

    <select id="getDrugsWithAlert" parameterType="int"  
            resultType="org.mydb.formulary.drug_master.model.Drug_Master">

        Select drug_id , drug_name , drug_alert_date, drug_alert_source
          from (select drug_id,drug_name,to_char(drug_alert_datetime,'MM/DD/YYYY') as
                       drug_alert_date ,drug_alert_source
                  from drug_master
                  where drug_status ='A' and length(drug_alert) > 0
                  order by drug_alert_datetime DESC )

       <if test="_parameter != null and _parameter > 0">
          where rownum &lt;= #{maxrowcount}
       </if>
    </select>
 </mapper>

您的查詢已聲明了參數 ,這些參數將在執行時被其相應的值替換。 參數名稱是您發送給查詢的對象的屬性。

但是您的映射具有parameterType="int" ,這是一個簡單值。 該值將完全替換參數。 如果您的參數類型是Map或某種對象,那么名稱就變得很重要,因為它們分別命名了對象的鍵或屬性。

因為您有一個int所以名稱並不重要,可以是#{maxrowcount}#{mcount}#{whatever} 這就是為什么第一部分起作用。

對於第二部分,由於_parameter 未記錄,因此比較棘手。 MyBatis是一個很好的框架,但遺憾的是缺少文檔部分。 輸入參數存儲在映射上下文中的鍵_parameter下。 在這種情況下,這是您的int參數。 這就是第二部分的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM