# DBAPI的SQL实现模糊查询的3种方案

# LIKE 查询

SQL 中的 LIKE 查询可以实现模糊查询,比如查询名字中包含“张”的记录。

select * from student where name like '%张%'

在 API 中获取参数 name,并将其传入 SQL 语句中,有以下 3 种方法。

# 方案一:使用原生 SQL 字符串拼接

# MySQL

select * from student where name like CONCAT('%', #{name}, '%')

这里使用了 MySQL 的 CONCAT 函数,将百分号 % 与参数 name 进行拼接,实现模糊查询。

# Oracle

select * from student where name like '%' || #{name} || '%'

在 Oracle 中,使用双竖线 || 进行字符串拼接。

# PostgreSQL

select * from student where name like '%' || #{name} || '%'

PostgreSQL 中也可以使用双竖线 || 进行字符串拼接。

# SQL Server

select * from student where name like '%' + #{name} + '%'

在 SQL Server 中,使用加号 + 进行字符串拼接。

# 方案二:使用动态 SQL 的 bind 标签

DBAPI支持类似mybatis的动态SQL标签语法,通过 bind 标签,将参数 name 拼接模糊查询的通配符%,并生成新的变量 pattern

完整SQL示例如下:

<bind name="pattern" value="'%' + name + '%'" />
select * from student where name like #{pattern}

# 方案三:使用参数处理插件

  1. 访问插件市场 (opens new window),下载字符串拼接插件,上传到 DBAPI 的 extlib 目录或者 lib 目录下,重启 DBAPI 服务。

  1. 全局插件-参数处理 中选择 字符串拼接插件

    插件参数填写 {"fields":["name"]}

    使用此插件后,系统会自动给 name 参数值的首尾拼接上%字符。

  1. SQL 中的like查询可以直接使用参数 #{name},不用拼接通配符。
select * from student where name like #{name}