@PathVariable这有啥作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@PathVariable这有啥作用相关的知识,希望对你有一定的参考价值。

@PathVariable获取的是请求路径中参数的值。

@PathVariable当使用@RequestMapping URI template 样式映射时, 即 someUrl/paramId, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。

示例代码:

@Controller

@RequestMapping("/owners/ownerId")

public class RelativePathUriTemplateController

@RequestMapping("/pets/petId")

public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model)

// implementation omitted

上面代码把URI template 中变量 ownerId的值和petId的值,绑定到方法的参数上。若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable("name")指定uri template中的名称。

示例代码:

@Controller

@RequestMapping("/pets")

@SessionAttributes("pet")

public class EditPetForm

@RequestMapping(method = RequestMethod.GET)

public String setupForm(@RequestParam("petId") int petId, ModelMap model)

Pet pet = this.clinic.loadPet(petId);

model.addAttribute("pet", pet);

return "petForm";

参考技术A @PathVariable是用来对指定请求的URL路径里面的变量 eg: Java代码 @RequestMapping(value = "form/id/apply", method = RequestMethod.PUT, RequestMethod.POST) id在这个请求的URL里就是个变量,可以使用@PathVariable来获取 @PathVariable和@RequestParam的区别就在于:@RequestParam用来获得静态的URL请求入参本回答被提问者采纳

MySQL 查询 - 这有啥问题吗? [关闭]

【中文标题】MySQL 查询 - 这有啥问题吗? [关闭]【英文标题】:MySQL Query - Any issues in this? [closed]MySQL 查询 - 这有什么问题吗? [关闭] 【发布时间】:2012-08-24 21:32:31 【问题描述】:

您是否发现此 MySQL 查询有任何问题?它不执行。 还有其他更好的想法吗?

INSERT INTO registration 
   ( m_ID,  e_ID,   STATUS) 
SELECT 
   :m_ID, :e_ID, 1
WHERE 
    EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE m_ID = :m_ID)

使用e_idm_ID (PDO) 的值传递数组

基本上,目标是在插入到另一个表之前检查两个 ID 是否存在于不同的表中。

错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL    
syntax; check the manual that corresponds to your MySQL server version for the right  
syntax to use near 'WHERE EXISTS ( SELECT 1 FROM tableb WHERE ID = '276') AND EX' at 
line 4

【问题讨论】:

投票结束。请更具体地说明您的问题。我看到您的查询有 4,123 个问题。哪些是你关心的? 告诉我该查询的一个问题?为什么它不执行? @KevinRave:告诉我们一条错误消息。发布您的 PHP 代码也会有很大帮助。 您的错误信息与您发布的查询不符。 尝试单独运行该子查询,首先使用该值 276,然后使用数组。两者都独立工作吗? 【参考方案1】:

如果两个 ID 都存在于不同的表中

但您的查询搜索了两次tableb。除非您真正的意思是“在一个不同的表中”(我不这么认为,您会使用单个 EXISTS),否则这可能是您想要的错误。

另外,PDO 应该有某种错误日志记录。查询可能不会执行,但原因应该会出现 - 或者应该可以让它出现 - somewhere

更新

恐怕我错了,语法正确。 MySQL 不允许 SELECT ... WHERE 除非指定表。

尝试改变

SELECT 
   :m_ID, :e_ID, 1
WHERE EXISTS

SELECT * FROM
   ( SELECT :m_ID, :e_ID, 1 ) AS dummy
WHERE EXISTS

测试

mysql> SELECT 42;
+----+
| 42 |
+----+
| 42 |
+----+
1 row in set (0.00 sec)

mysql> SELECT 42 WHERE true;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE true' at line 1


mysql> SELECT * FROM ( SELECT 42 ) AS answer WHERE true;
+----+
| 42 |
+----+
| 42 |
+----+
1 row in set (0.00 sec)

【讨论】:

对不起。这是一个错字。第二个选择是tablec 好的。然而,您应该有办法恢复 PDO 的最后一个错误。 errorInfo() 说什么? (代码应该可以工作;tableb 确实有一个名为 ID 而不是 e_ID 的列,对吗?再说一次,tablec 的 id 称为 m_ID 而不是 ID?) SQL中的字段名正确。 你成功了。但仍然没有解释为什么它没有按原样工作。【参考方案2】:

您说您“正在查看来自不同表的 ID”,

目前您正在检查相同的表格两次:

EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tableb WHERE m_ID = :m_ID)

也许你应该把对tableb的第二个引用改成tablec,如下:

EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE m_ID = :m_ID)

【讨论】:

是的,这就是我真正的意思。但它不起作用。【参考方案3】:

也许您将列名与数组名混淆了?可以将其更改为此代码吗?

(注意 m_ID 现在只是 ID)

EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE ID = :m_ID)

根据您的新错误编辑,这很可能 或(ID 现在是 e_ID)

EXISTS ( SELECT 1 FROM tableb WHERE e_ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE m_ID = :m_ID)

【讨论】:

不。列名是正确的。我重新检查了。

以上是关于@PathVariable这有啥作用的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询 - 这有啥问题吗? [关闭]

来自包导入模块的python,这有啥问题吗?

Javascript文件大小,这有啥不同吗?

HTTP 协议无连接且默认使用 TCP,这有啥意义?

谁能告诉我这有啥问题?

如何以正确的方式编写代码内注释和文档?这有啥标准吗? [关闭]