Mybatis-模糊查询的俩种方法

简介: Mybatis-模糊查询的俩种方法

方法一: 使用CONCAT(like concat)

like concat (参数一,参数二,参数三):用于模糊查询,不推荐直接用like,所以用concat连接

1.参数一: 第一个基本上用 ‘%’

2.参数二: 传入的参数

3.参数三: 第三个基本上用 ‘%’(和第一个对应)

<if test="blockPushLog.blockName!=null and blockPushLog.blockName!=''">
     and b.BLOCK_NAME like CONCAT('%',#{blockPushLog.blockName},'%')
 </if>

方法二: 使用bind模糊查询(推荐优先使用)

bind(参数一,参数二):用于模糊查询

1.参数一: name:自定义名称,变量名,用于赋予like后面的名称

2.参数二: value: 传入的参数

<if test="null != username and '' != username">
                <bind name="username" value="'%'+username+'%'"/>
                username like #{username}
            </if>
            <if test="null != nickname and '' != nickname">
                <bind name="nickname" value="'%'+nickname+'%'"/>
                and nickname like #{nickname}
            </if>
            <if test="null != address and '' != address">
                <bind name="address" value="'%'+address+'%'"/>
                and address like #{address}
            </if>

两者区别

like concat :

(1).使用concat函数连接字符串,在mysql中这个函数支持多个参数,但是其他数据库不一定支持多个参数,因而兼容性弱;

(2)因为直接使用:(’%’+参数+ ‘%’),存在sql注入的情况下,也可以把你写的sql语句看成不同的部分分割来对待,即安全性差,容易遭到攻击

bind:(推荐优先使用)

(1) 各数据库通用,兼容性强

(2) 可以预防SQL注入(比like concat强),因而安全性也强

注:Oracle 数据库中写法略有区别

like concat(concat('%',#{xxxxx},'%'))
目录
相关文章
|
5月前
|
SQL Java 数据库连接
Mybatis【Map传参与模糊查询】
Mybatis【Map传参与模糊查询】
|
7月前
|
SQL XML Java
Mybatis系列(二)之动态SQL和模糊查询
Mybatis系列(二)之动态SQL和模糊查询
|
1月前
|
XML Java 数据库连接
调用mybatisplus的封装CURD方法出现报错
调用mybatisplus的封装CURD方法出现报错
12 0
|
2月前
|
XML SQL Java
Mybatis接口Mapper内的方法为啥不能重载吗
Mybatis接口Mapper内的方法为啥不能重载吗
23 0
|
2月前
|
SQL 存储 Kubernetes
Seata常见问题之mybatisplus的批量插入方法报SQL错误如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
54 0
|
6月前
|
Java 关系型数据库 MySQL
MyBatis模糊查询like的三种方式
MyBatis模糊查询like的三种方式
|
4月前
|
SQL XML Java
关于mybatis-plus写自定义方法(自定义sql)
关于mybatis-plus写自定义方法(自定义sql)
86 1
|
5月前
|
SQL Java 数据库连接
干翻Mybatis源码系列之第十一篇:Mybatis拦截器获取被拦截对象的方法和参数
干翻Mybatis源码系列之第十一篇:Mybatis拦截器获取被拦截对象的方法和参数
|
5月前
|
Java 数据库连接 mybatis
Mybatis源码细节探究:sqlSessionFactory.openSession()这个方法到底发生了什么?
Mybatis源码细节探究:sqlSessionFactory.openSession()这个方法到底发生了什么?