@SelectProvider中mybatis参数替换是如何工作的

2023-12-29

我继承了一些我试图理解的代码以及我为找到一些东西所做的任何搜索@SelectProvider结果什么也没有。

Java DAO

@SelectProvider(type = CategoryDaoSelectProvider.class, method = "findByParentIdAndName")
Category findByParentIdAndName(@Param("parentId") Long parentId, @Param("name") String name);

选择提供商

public class CategoryDaoSelectProvider {
    public static String findByParentIdAndName(Map<String, Object> params) {
        Long parentId = (Long)params.get("parentId");  // WHY IS THIS HERE???

        StringBuffer buffer = new StringBuffer();
        buffer.append("SELECT COUNT(id) FROM Category ");

        if (parentId == null) {
            buffer.append("WHERE parentId IS NULL ");
        } else {
            buffer.append("WHERE parentId = #{parentId} ");
        }

        buffer.append("AND LOWER(name) = LOWER(#{name}) ");

        return buffer.toString();
    }
}

这段代码中的参数parentId 有什么作用?据我所知,它实际上从未执行任何操作,除非以某种方式神奇地将 #{parentId} 替换为该值。在这种情况下是否不使用此参数?哪里有mybatis实际上是注入到查询中吗?


SelectProviders 通过两种方式接收参数:作为 params Map 参数中的项目和作为 #{parentId} (在您的示例中)。您的代码显示在 select 语句中使用parentId 之前先对其进行检查。需要parentId 变量,因为您无法查询#{parentId}。

顺便说一句,这不是 SelectProviders 的最佳实现,您应该在最后使用 SELECT()、WHERE() 和 SQL() 来返回编译后的语句。我想你的例子也有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@SelectProvider中mybatis参数替换是如何工作的 的相关文章

随机推荐

  • 需要对开发者控制台上的 beta/alpha 测试进行一些说明

    背景 Android 开发者控制台有 3 个选项卡用于发布应用程序的 apk 文件 alpha beta 和 production 如下所示 我记得在一次 Google IO 讲座中 在进行 100 规模发布之前检查应用程序的好坏的一个很酷
  • 单击网格中的 LinkBut​​ton 时避免页面刷新

    我有一个GridView控件 并且在该控件内部我使用定义了一个链接按钮GridView ItemTemplate 我用它来点击打开一个新窗口 但是 当我单击链接按钮时 页面会在打开新窗口之前刷新 单击链接按钮后如何阻止页面刷新 当我将更新面
  • D3 网格中的力模拟

    我想知道如何修改Mike Bostock 的多力布局示例 https bl ocks org mbostock 1021841为了尝试获得强制布局以对网格中的节点进行分组 让我们假设我们有以下 csv Name Category1 Cate
  • 从字符串创建可变长度数组

    字符串 string a b c d 应该创建一个像这样的数组 array a gt array b gt array 我想出了这个 function create array arr string data parts explode s
  • Webpack 警告:您可能需要适当的加载器来处理此文件类型 (date-nfs)

    我的应用程序有问题 我有一个网站 我使用 date fns 根据用户语言显示格式化日期 它工作得很好 但我更新了 date fns 从那以后我收到了一个警告 在我的 JavaScript 代码中我使用 const locale requir
  • 尝试/捕获或验证速度?

    我正在使用 Python 每当我必须验证函数输入时 我都会假设输入有效 然后捕获错误 就我而言 我有一个通用的Vector 我用它来做一些不同的事情 其中 之一就是加法 它的功能既是Color 类并作为Vector 所以当我向Color 它
  • 如何在 Android 中从全名中拆分名字和姓氏字符串

    我有一张带有全名的表格EditText字段 我想将字符串分解为名字和姓氏字符串 谁可以帮我这个事 我可以知道实现我的目标的正确方法是什么吗 如果用户输入他 她的名字 例如A B C 名字将是A 姓氏遗嘱BC 我正在尝试这个 EditText
  • 在 google chrome 版本 54 中,禁用字段是不可选择的

    似乎在上次 google chrome 版本 54 更新后 我无法通过鼠标文本从我的网站中的禁用字段中进行选择 Text inside this input not selectable by mouse but before it was
  • cuda & rdc & 推入多个共享对象会在 registerEntryFunction 中产生 SIGSEV

    我正在尝试在两个共享库中运行可重定位设备代码 两者都使用 cuda thrust 如果我停止在 kernel cu 中使用推力 一切都会正常运行 这不是一个选项 编辑 如果 rdc 被禁用 该程序也可以工作 对我来说也不是一个选择 它编译得
  • 如何在 HTML 工具提示中使用回车符?

    我目前正在向我们的网站添加详细的工具提示 并且我希望 无需求助于出色的 jQuery 插件 我知道有很多 使用回车符来格式化工具提示 要添加提示 我正在使用title属性 我浏览了常用网站并使用了以下基本模板 a title link wi
  • c# 在html中查找图像并下载它们

    我想下载存储在 html 网页 中的所有图像 我不知道将下载多少图像 并且我不想使用 HTML AGILITY PACK 我在谷歌中搜索 但所有网站都让我更加困惑 我尝试了正则表达式 但只有一个结果 人们给了你正确的答案 你也不能挑剔和懒惰
  • dplyr 查找表/模式匹配[重复]

    这个问题在这里已经有答案了 我一直在寻找一种聪明的或 更整洁 的方式来利用 tidyverse 中的查找表 但找不到令人满意的解决方案 我有一个数据集和查找表 Sample data data lt data frame patients
  • Azure 数据工厂通过访问密钥连接到 Blob 存储

    我正在尝试在 Azure 数据工厂中构建一个非常基本的数据流 从 blob 存储中提取 JSON 文件 对某些列执行转换 然后存储在 SQL 数据库中 我最初使用托管身份对存储帐户进行身份验证 但在尝试测试与源的连接时收到以下错误 com
  • 使用 Laravel 5.2 的内置身份验证将旧的 md5 密码迁移到 bcrypt

    我正在将旧的 PHP 应用程序迁移到 Laravel 5 2 该应用程序有一个巨大的用户表 大约 50K 用户 密码都是 MD5 哈希值 显然这是不可接受的 但我不想向所有 50 000 个用户发送电子邮件要求他们重置密码 而是想在幕后将密
  • 尽管有定义,但我有一个编译器错误“未定义”

    from gasp import GRID SIZE 30 MARGIN GRID SIZE BACKGROUND COLOR color BLACK Colors we use WALL COLOR 0 6 255 0 9 255 0 9
  • Gremlin 掉落多个顶点

    我正在尝试删除给定 Gremlin 查询返回的所有顶点 目标是删除作为特定顶点的子级的所有子顶点 这是一个例子 gremlin gt g V dcb26be6 8d39 ae81 6ef2 6f60d06bce10 emit repeat
  • 非轮询/非阻塞定时器?

    到目前为止我发现的最好的解决方案就是使用sleep 功能 我想在计时器到期事件发生时运行我自己的回调函数 有没有什么事件驱动的方法可以解决这个问题 from time import sleep Sleep for a minute time
  • 在 Haskell 中创建除数列表而不按顺序除法

    我正在哈斯克尔学习 我一直在实现一个制作除数列表的函数 我的第一个代码在这里 Code divisors Integral a gt a gt a divisors n n lt 1 otherwise filter 0 mod n 1 n
  • JavaScript 正则表达式 - 正向前瞻 - 给我语法错误

    这段正则表达式 lt href 应该匹配 href 值中的所有内容 除了哈希值及其在 href url 中跟随的内容 它似乎在正则表达式调试器 测试器下工作正常 例如http gskinner com RegExr http gskinne
  • @SelectProvider中mybatis参数替换是如何工作的

    我继承了一些我试图理解的代码以及我为找到一些东西所做的任何搜索 SelectProvider结果什么也没有 Java DAO SelectProvider type CategoryDaoSelectProvider class metho