繁体   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