<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.sf.mapper.SysUserInfoMapper">
    <!--在SQL语句中添加%通配符-->


    <select id="findByName1" resultType="com.sf.entity.SysUserInfo">
        SELECT *
        FROM sys_user_info
        WHERE real_name LIKE #{realName}
    </select>
    <!--${} 是一种拼接字符串的形式，有安全风险， 可能会造成SQL注入-->
    <select id="findByName2" resultType="com.sf.entity.SysUserInfo">
        SELECT *
        FROM sys_user_info
        WHERE real_name LIKE '${realName}'
    </select>
    <!--CONCAT('%',#{realName},'%') 可以避免SQL注入，同时可以把%通配符放到sql语句中，不用每次测试的时候添加。
        最推荐
    -->
    <select id="findByName3" resultType="com.sf.entity.SysUserInfo">
        SELECT *
        FROM sys_user_info
        WHERE real_name LIKE CONCAT('%',#{realName},'%')
    </select>

    <!--CONCAT('%',${realName},'%') 可以避免SQL注入，同时可以把%通配符放到sql语句中，不用每次测试的时候添加。-->
    <select id="findByName4" resultType="com.sf.entity.SysUserInfo">
        SELECT *
        FROM sys_user_info
        WHERE real_name LIKE CONCAT('%',${realName},'%')
    </select>
    <!--
        使用双引号将%通配符括起来，可以不适用CONCAT函数
    -->
    <select id="findByName5" resultType="com.sf.entity.SysUserInfo">
        SELECT *
        FROM sys_user_info
        WHERE real_name LIKE "%"#{realName}"%"
    </select>

    <select id="findByIds" resultType="com.sf.entity.SysUserInfo">
        SELECT *
        FROM sys_user_info
        WHERE info_id IN
        <foreach collection="list" item="id" index="i" open="(" separator="," close=")">
            #{id}
        </foreach>
    </select>
    <select id="findByIds2" resultType="com.sf.entity.SysUserInfo">
        SELECT * FROM sys_user_info
        WHERE info_id BETWEEN #{start}	AND #{end}
    </select>

    <!--
        ${}和#{}的区别：
            编译过程中：
                ${} 先编译再执行，有SQL注入的风险
                #{} 是占位符，先进行预编译，再将值传入，最后执行
            是否自动加引号：
                ${}：对应的变量不会自动添加单引号
                #{}：对应的变量会自动添加单引号
            安全性：
                ${}：不能防止SQL注入
                #{}：能防止SQL注入
    -->

</mapper>