情境设置:假设name的值有"Zhao"、"Qian"、"Sun"、"Li"。现在要查找name中含"a"的,即"Zhao"、"Qian"。
方式一:
xml:
<select id="findByName" parameterType="String" resultType="cn.liuxingchang.domain.Account"> select * from account where name like #{name} </select>Java:
List<Account> accounts = dao.findByName("%a%");总结:SQL语句中不含通配符%,方法参数要使用通配符%
方式二:
xml:
<select id="findByName" parameterType="String" resultType="cn.liuxingchang.domain.Account"> select * from account where name like '%${value}%' </select>Java:
List<Account> accounts = dao.findByName("a");总结:
1、SQL语句中含有通配符%,方法参数无需通配符%(有也无妨);
2、注意到没?xml中的SQL语句'%${value}%'很特别!特别在哪呢?
2.1、用了单引号,其实用双引号也行!
2.2、没用#号,而是用的$!
2.3、按说大括号里应该是name,即{name},怎么变成了{value}?是的,这种方式的模糊查询只能传一个参数,而且不管这个参数名叫什么,大括号号只能是value这个单词!
两种方式的比较:
方式一使用的是PreparedStatement对象的参数占位符,方式二使用的是Statement对象的字符串拼接!