Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个WHERE子句在MyBatis mapper+Spring3应用程序中起作用?_Java_Spring_Mybatis - Fatal编程技术网

Java 为什么这个WHERE子句在MyBatis mapper+Spring3应用程序中起作用?

Java 为什么这个WHERE子句在MyBatis mapper+Spring3应用程序中起作用?,java,spring,mybatis,Java,Spring,Mybatis,我在一个例子中找到了下面的代码,它是有效的。但我不知道为什么 我的问题是: 如何将getDrugswithalertentit count的映射分配给{maxrowcount}我可以将任何内容放入{maxrowcount},{mcount}中,这似乎并不重要 如何/为什么使用if测试=\u参数!=null和_参数>0是否有效 我的DAO界面如下所示: @Repository public interface DrugMasterDao { public List<Drug_Mast

我在一个例子中找到了下面的代码,它是有效的。但我不知道为什么

我的问题是:

如何将getDrugswithalertentit count的映射分配给{maxrowcount}我可以将任何内容放入{maxrowcount},{mcount}中,这似乎并不重要

如何/为什么使用if测试=\u参数!=null和_参数>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>
我的映射程序文件如下所示:

@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,这是一个简单的值。该值将完全替换该参数。如果参数类型是某种类型的映射或对象,则名称变得很重要,因为它们分别命名对象的键或属性

因为您有一个int,所以名称不重要,可以是{maxrowcount}、{mcount}、{whatever}。这就是第一部分工作的原因

对于第二部分,它更复杂,因为_参数是。MyBatis是一个很好的框架,但遗憾的是,它缺少文档部分。输入参数存储在映射上下文中的key _参数下。在本例中,它是您的int参数。这就是第二部分的工作原理