SysUserInfoMapper.xml 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.sf.mapper.SysUserInfoMapper">
  6. <!--在SQL语句中添加%通配符-->
  7. <select id="findByName1" resultType="com.sf.entity.SysUserInfo">
  8. SELECT *
  9. FROM sys_user_info
  10. WHERE real_name LIKE #{realName}
  11. </select>
  12. <!--${} 是一种拼接字符串的形式,有安全风险, 可能会造成SQL注入-->
  13. <select id="findByName2" resultType="com.sf.entity.SysUserInfo">
  14. SELECT *
  15. FROM sys_user_info
  16. WHERE real_name LIKE '${realName}'
  17. </select>
  18. <!--CONCAT('%',#{realName},'%') 可以避免SQL注入,同时可以把%通配符放到sql语句中,不用每次测试的时候添加。
  19. 最推荐
  20. -->
  21. <select id="findByName3" resultType="com.sf.entity.SysUserInfo">
  22. SELECT *
  23. FROM sys_user_info
  24. WHERE real_name LIKE CONCAT('%',#{realName},'%')
  25. </select>
  26. <!--CONCAT('%',${realName},'%') 可以避免SQL注入,同时可以把%通配符放到sql语句中,不用每次测试的时候添加。-->
  27. <select id="findByName4" resultType="com.sf.entity.SysUserInfo">
  28. SELECT *
  29. FROM sys_user_info
  30. WHERE real_name LIKE CONCAT('%',${realName},'%')
  31. </select>
  32. <!--
  33. 使用双引号将%通配符括起来,可以不适用CONCAT函数
  34. -->
  35. <select id="findByName5" resultType="com.sf.entity.SysUserInfo">
  36. SELECT *
  37. FROM sys_user_info
  38. WHERE real_name LIKE "%"#{realName}"%"
  39. </select>
  40. <select id="findByIds" resultType="com.sf.entity.SysUserInfo">
  41. SELECT *
  42. FROM sys_user_info
  43. WHERE info_id IN
  44. <foreach collection="list" item="id" index="i" open="(" separator="," close=")">
  45. #{id}
  46. </foreach>
  47. </select>
  48. <select id="findByIds2" resultType="com.sf.entity.SysUserInfo">
  49. SELECT * FROM sys_user_info
  50. WHERE info_id BETWEEN #{start} AND #{end}
  51. </select>
  52. <!--
  53. ${}和#{}的区别:
  54. 编译过程中:
  55. ${} 先编译再执行,有SQL注入的风险
  56. #{} 是占位符,先进行预编译,再将值传入,最后执行
  57. 是否自动加引号:
  58. ${}:对应的变量不会自动添加单引号
  59. #{}:对应的变量会自动添加单引号
  60. 安全性:
  61. ${}:不能防止SQL注入
  62. #{}:能防止SQL注入
  63. -->
  64. </mapper>