举个例子说:
1. 如果是用?{param2},比如SQL是select colA from tableA where colA = ?{param2}
那么实际执行的创建PreparedStatement的SQL就是 select colA from tableA where colA = ? 之后在通过stmt.setObject的方式把param2的实际值设置进去。
2. 如果是?{@param2}的写法,比如比如SQL是select colA from tableA where colA = ?{@param2}
那么就是直接替换,比如param2这个参数的值是'value1234' 那么创建PreparedStatement的SQL就是select colA from tableA where colA = 'value1234' 不会stmt.setObject的方式给这个参数赋值。
这是两个完全不同的用法。