MyBatis底层实现模糊查询的方法有哪些

MyBatis实现模糊查询

模糊查询在我们开发中是一项必不可缺少的重要内容。、
对于我们mybatis实现模糊查询有五种方式,以下具体的实现步聚:

1. 添加模糊查询的接口方法likeSearchUsers

/**
     * 根据name模糊查询
     * @param name
     * @return
     */
    public List<User> likeSearcherUsers(String name);

2.配置接口方法对应的sql文件

1) 配置占位符方式#{}

<select id="likeSearcherUsers" parameterType="String" resultType="cn.offcn.entity.User">
select * from user where name like #{name}
</select>
<!--此时如果要实现模糊查询,查询的关键字前后需要带有%,如查询姓名中带有王的,这样写查询关键字:%王% -->

2) 配置拼接字符串方式${}——存在sql注入问题

<select id="likeSearcherUsers" parameterType="String" resultType="cn.offcn.entity.User">
select * from user where name like '%${value}%'
</select>

我们在上面将原来的#{}占位符,改成了${value}。
注意如果用模糊查询的这种写法,那么${value}的写法就是固定的,不能写成其它名字。

3) 配置mysql函数方式concat

<select id="likeSearcherUsers" parameterType="String" resultType="cn.offcn.entity.User">
select * from user where name like concat('%',#{name},'%')
</select>
<!--函数方式concat只能用在mysql数据库中,如果用在其他数据库会有问题-->

4)动态标签

<select id="getPersonByLikeName2"  resultMap="BaseResultMap">
    <bind name="personName" value="'%' + _parameter.getName() + '%'"></bind>
    select * from person where p_name like #{personName}
</select>
<!--此种方法模糊查询的只能是实体类对象,不能是基本数据类型数据-->

5)最佳方式——配置占位符方式#{}实现模糊查询且避免sql注入

<select id="getPersonByLikeName"  resultMap="BaseResultMap">
        select * from person where p_name like '%' #{name} '%'
</select>
<!--此种方法#{name}左右空格不可忽略-->

3.#{}和${}的区别

1.#{}是预编译处理,${}是字符串替换(有可能会产生sql注入问题)。
2.Mybatis在处理${}时,就是把${}替换成变量的值。
3.Mybatis在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值。
4.使用#{}可以有效的防止 SQL 注入,提高系统安全性。
posted @ 2021-06-23 15:26  泰初  阅读(351)  评论(0编辑  收藏  举报