There is no getter for property named ‘col‘ in ‘class String‘,不是说一个参数不需要@Param注解吗?#{}和${}的区别
1. 當一個String類型的參數作為sql語句的where條件可以正常運行
?
2. 當一個String類型的參數不作為sql語句的where條件,而表示一個表名或列名,報錯:Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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.
?
3. 出現第二點的語法錯誤,其實是因為#{}使用的是PreparedStatement,這種Statement使用占位符,無法字符串拼接,因此當一個參數要作為表名或列名時,需要使用${}.
解決:在接口的方法中為String類型參數使用@Param注解,最終程序代碼如下圖。
?
總結:
①雖然有時只有一個參數,但依然需要使用@Param注解;
②#{}和${}的區別:#{}使用的是PreparedStatement,不存在sql注入;而且可以預編譯、批量操作,所以效率高。而${}使用的是Statement,存在sql注入;但是${}可以用在參數是表名或列名的情況。
總結
以上是生活随笔為你收集整理的There is no getter for property named ‘col‘ in ‘class String‘,不是说一个参数不需要@Param注解吗?#{}和${}的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mybatis工作流程,附带mybati
- 下一篇: 什么是代理模式?代理模式有什么用?通过一