mybatis-plus实现指定字段模糊查询

本文介绍在MyBatis-Plus 3.3.0版本下,如何针对Oracle 11g数据库进行name字段的模糊查询。通过自定义注解类解决因Oracle不支持CONCAT函数拼接多个参数导致的问题。

mybatis-plus版本:3.3.0

oracle版本:11g

很常见的一个需求场景:某张表在前端显示时,查询条件中,往往name字段需要模糊查询,否则默认mybatis-plus是用的全字符匹配查询。如何最小限度地改造代码,实现某个字段模糊查询,其实mybatis-plus官方文档给出了答案:

通过@TableField注解地condition属性,可以配置某个字段,始终使用模糊匹配,打开condition类,去看看有哪些可选项:

一共有5个可选项,默认是采用第一个:EQUAL。

接下来改造自己的代码:

然而在数据库为oracle的情况下会报错,打印出来的SQL如下:

SELECT COUNT(1)
 FROM TEST_TABLE
 WHERE TITLE LIKE CONCAT('%', '激光', '%');

由于oracle的CONCAT函数不支持拼接2个以上的参数,因此产生了错误。因此自己定义一个注解类,@TableField注解不变,

只需要注意引入的SqlCondition类是你自己新定义的类,或者为了避免混淆,干脆你换个名字不叫SqlCondition,如下:

问题解决。

要使用MyBatis-Plus实现JSON字段的模糊查询,可参考以下步骤与方法: ### 演示表格准备 在进行模糊查询前,需要准备好演示表格,这是后续操作的基础,但具体表格创建与准备细节未在给定引用中详细说明,一般需依据实际业务需求来设计表结构,确保包含JSON字段 [^1]。 ### SQL操作JSON实现模糊查询 在SQL层面实现JSON字段的模糊查询后,可将其应用到MyBatis-Plus中。不过引用未给出具体SQL示例,在实际操作时,不同数据库的SQL语法存在差异。例如,在MySQL 5.7及以上版本,可借助`JSON_EXTRACT`函数提取JSON字段的值,再使用`LIKE`关键字进行模糊查询,示例如下: ```sql SELECT * FROM your_table WHERE JSON_EXTRACT(json_column, '$.your_key') LIKE '%your_value%'; ``` ### MyBatis-Plus中操作JSON字段实现模糊查询 #### QueryWrapper查询的JSON处理 可利用`QueryWrapper`来构建查询条件,以实现JSON字段的模糊查询。示例代码如下: ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.yourcompany.entity.YourEntity; import com.yourcompany.mapper.YourMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class YourService { @Autowired private YourMapper yourMapper; public List<YourEntity> fuzzyQueryJsonField(String value) { QueryWrapper<YourEntity> queryWrapper = new QueryWrapper<>(); // 假设JSON字段名为jsonColumn,要查询的JSON键为your_key queryWrapper.apply("JSON_EXTRACT(json_column, '$.your_key') LIKE {0}", "%" + value + "%"); return yourMapper.selectList(queryWrapper); } } ``` 在上述代码中,借助`QueryWrapper`的`apply`方法将SQL查询条件应用到查询中,实现JSON字段的模糊查询。 #### 自定义SQL操作 也可通过自定义SQL来实现JSON字段的模糊查询。在Mapper接口里定义方法,然后在对应的XML文件中编写SQL语句。示例如下: Mapper接口: ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yourcompany.entity.YourEntity; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface YourMapper extends BaseMapper<YourEntity> { List<YourEntity> fuzzyQueryJsonField(String value); } ``` XML文件: ```xml <mapper namespace="com.yourcompany.mapper.YourMapper"> <select id="fuzzyQueryJsonField" resultType="com.yourcompany.entity.YourEntity"> SELECT * FROM your_table WHERE JSON_EXTRACT(json_column, '$.your_key') LIKE #{value} </select> </mapper> ``` 在Service层调用该方法: ```java import com.yourcompany.entity.YourEntity; import com.yourcompany.mapper.YourMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class YourService { @Autowired private YourMapper yourMapper; public List<YourEntity> fuzzyQueryJsonField(String value) { return yourMapper.fuzzyQueryJsonField("%" + value + "%"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值