gpt4 book ai didi

java - 为什么这个 WHERE 子句在我的 MyBatis 映射器 + Spring3 应用程序中有效?

转载 作者:行者123 更新时间:2023-11-30 11:24:17 25 4
gpt4 key购买 nike

我在示例中找到了以下代码并且它有效。但我不知道为什么。

我的问题是:

  • getDrugsWithAlert(int count) 的映射如何分配给 #{maxrowcount}(我可以在里面放任何东西:#{maxrowcount }, #{mcount} 似乎无关紧要);

  • if test="_parameter != null and _parameter > 0 如何/为何起作用?

我的 DAO 接口(interface)是这样的:

@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>

最佳答案

您的查询已声明 parameters将在执行时替换为相应的值。参数名称是您发送给查询的对象的属性。

但是您的映射具有 parameterType="int",这是一个简单的值。该值将完全替换参数。如果您的参数类型是 Map 或某种对象,那么名称就变得很重要,因为它们分别命名了对象的键或属性。

因为你有一个 int 名称并不重要,可以是 #{maxrowcount}, #{mcount}, # {随便}。这就是第一部分起作用的原因。

第二部分比较棘手,因为 _parameterundocumented . MyBatis 是一个不错的框架,但遗憾的是,缺少文档部分。输入参数存储在映射上下文中的键 _parameter 下。在这种情况下,它是您的 int 参数。这就是第二部分的工作原理。

关于java - 为什么这个 WHERE 子句在我的 MyBatis 映射器 + Spring3 应用程序中有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20708775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com