Mybatis中LIKE的三种写法

第一种写法:

 <select id="queryPersonList" resultMap="BaseResultMap">
        SELECT
          personName, personPassword, address
        FROM person_info
        <where>
            1=1
            <if test="personName != null and personName !=''">
                AND personName LIKE 
                "%${personName,jdbcType=VARCHAR}%"
            </if>
        </where>
    </select>

$符号可能导致SQL注入,不推荐。

第二种写法:

<select id="queryPersonList" resultMap="BaseResultMap">
        SELECT
          personName, personPassword, address
        FROM person_info
        <where>
            1=1
            <if test="personName != null and personName !=''">
                AND personName LIKE 
                "%"#{personName,jdbcType=VARCHAR}"%"
            </if>
        </where>
    </select>

#{}在解析sql语句时候,在变量外侧自动加单引号'  ',因此这里 % 需要使用双引号"  ",不能使用单引号 '  ',否则会查不到任何结果。

第三种写法

<select id="queryPersonList" resultMap="BaseResultMap">
        SELECT
        personName, personPassword, address
        FROM person_info
        <where>
            1=1
            <if test="personName != null and personName !=''">
                AND personName LIKE 
                CONCAT('%', #{personName,jdbcType=VARCHAR}, '%')
            </if>
        </where>
    </select>

 使用CONCAT()函数连接参数形式,推荐使用这种方法。