SpringBoot-mybatisplus-模糊查询
模糊查询如何实现如下案例中两种实现方法
第一种:利用QueryWrapper.like自己实现。
第二种:使用@TableField(condition = SqlCondition.LIKE)实现。
特别注意:这里要特别强调一下第二种方法,对于mysql什么都不用改就可以成功,但是oralce需要自己重写like的拼接方法,因为mysql和oracle的CONCAT函数不同,oralce不接收三个以上的参数,不重写就会报“参数个数无效”的错误,这是个大坑千万注意。
如果使用的是mysql则下面的SqlCondition.java 不用写也可以正常使用。
1、数据准备(oracle版)
CREATE TABLE TEST_BLOCK_T
(
BLOCK_ID VARCHAR2(10 BYTE),
BLOCK_NAME VARCHAR2(200 BYTE),
TEST_NAME VARCHAR2(200 BYTE)
);
Insert into TEST_BLOCK_T (BLOCK_ID, BLOCK_NAME, TEST_NAME) Values ('99999', 'PHP哈JAVA', '你好啊');
COMMIT;
2、pom.xml文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.7.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.3.7.RELEASE</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency> <!-- 集成mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency> <!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency> </dependencies>
3、配置文件

4、工程结构

5、源码
package com.example.demo.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.domain.Block;
import com.example.demo.mapper.BlockMapper;
import com.example.demo.service.IBlockTService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.List;
import java.util.Map; @RestController
@RequestMapping("/hello")
public class HelloController { @Autowired
private IBlockTService iBlockTService; @Autowired
private BlockMapper blockMapper; @GetMapping("/list")
@ResponseBody
public List index(Block block) {
Map likeMap = new HashMap();
likeMap.put("BLOCK_NAME","哈");
Map map = iBlockTService.selectList(block,likeMap);
List<Block> list = (List)map.get("dataList");
return list;
} @GetMapping("/listlike")
@ResponseBody
public List listlike(Block block) {
List<Block> list = blockMapper.selectList(new QueryWrapper<>(block));
return list;
}
}
package com.example.demo.domain; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; @TableName(value = "TEST_BLOCK_T")
public class Block {
private static final long serialVersionUID = 1L; @TableId
private String blockId; private String blockName; @TableField(condition = SqlCondition.LIKE)
private String testName; public String getBlockId() {
return blockId;
} public void setBlockId(String blockId) {
this.blockId = blockId;
} public String getBlockName() {
return blockName;
} public void setBlockName(String blockName) {
this.blockName = blockName;
} public String getTestName() {
return testName;
} public void setTestName(String testName) {
this.testName = testName;
} @Override
public String toString() {
return "Block{" +
"blockId='" + blockId + '\'' +
", blockName='" + blockName + '\'' +
", testName='" + testName + '\'' +
'}';
}
}
package com.example.demo.domain; /**
* 由于oracle的CONCAT函数不支持拼接2个以上的参数,因此产生了错误。因此自己定义一个注解类
*/
public class SqlCondition {
/**
* mybatis原生sqlCondition是面向mysql的,在使用字段注解like时
* 用一个CONCAT函数拼接三个参数,会报错,因此复写。
*/
public static final String LIKE = "%s LIKE CONCAT(CONCAT('%%',#{%s}),'%%')";
}
package com.example.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.domain.Block; public interface BlockMapper extends BaseMapper<Block> { }
package com.example.demo.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.domain.Block;
import com.example.demo.mapper.BlockMapper;
import com.example.demo.service.IBlockTService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; /**
* <p>
* 服务实现类。
* </p>
*
* @author yc
* @since 2021-09-10
*/
@Service
public class BlockTServiceImpl implements IBlockTService { @Autowired
BlockMapper blockMapper; @Override
public Map selectList(Block block,Map likeMap) {
Map<String, List> reusltMap = new HashMap<>();
QueryWrapper<Block> queryWrapper = new QueryWrapper<>(block); //这里要把需要模糊查询的属性设置为null
block.setBlockName(null); Iterator entries = likeMap.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
String key = (String)entry.getKey();
String value = (String)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
queryWrapper.like(key,value);
} reusltMap.put("dataList", blockMapper.selectList(queryWrapper));
return reusltMap;
} }
package com.example.demo.service; import com.example.demo.domain.Block; import java.util.Map; /**
* <p>
* 服务类。
* </p>
*
* @author yc
* @since 2021-09-10
*/
public interface IBlockTService { Map selectList(Block block,Map likeMap); }
package com.example.demo; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
} }
6、测试文件下载
(1)利用QueryWrapper.like自己实现
注:需要模糊查询的字段直接写在controller里了,自己看源码

后台生成的语句如下:

(2)使用@TableField(condition = SqlCondition.LIKE)实现

后台生成的语句如下:

推荐一个适合零基础学习SQL的网站:不用安装数据库,在线轻松学习SQL!
SpringBoot-mybatisplus-模糊查询的更多相关文章
- springboot模糊查询
在学习MyBatis过程中想实现模糊查询,可惜失败了.后来上百度上查了一下,算是解决了.记录一下MyBatis实现模糊查询的几种方式. 数据库表名为test_student,初始化了几条记录,如图: ...
- MyBatis Plus 实现多表分页模糊查询
项目中使用springboot+mybatis-plus来实现. 但是之前处理的时候都是一个功能,比如分页查询,条件查询,模糊查询. 这次将这个几个功能合起来就有点头疼,写下这边博客来记录自己碰到的问 ...
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享三:问题2
框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 搜索框是该项目重要的一环,由于涉及 ...
- IDEA上创建 Maven SpringBoot+mybatisplus+thymeleaf 项目
概述 在WEB领域,Java也是在不断的探索和改进,从开始的JSP--->Struts1--->Struts2+Spring--->Spring MVC--->SpringBo ...
- springBoot+mybatisPlus小demo
项目介绍:采用restful api进行接口规范 / 项目框架SpringBoot+mybatis Plus / 采用mysql进行数据存储 / 采用swaggerUI进行前后端业务分离式开发. 开发 ...
- 2、SpringBoot+MybatisPlus整合-------BaseCRUD
开发工具:STS 代码下载链接:GitHub管理代码 版本: Springboot:1.5.14.RELEASE 使用2.0以上的Springboot,会报出一些异常.欢迎知道异常原因的大牛解惑. M ...
- 表单模糊查询的三种简单方式(springboot-h2-mybatis)
前几天运营提到说后台管理系统有几个地方想要模糊查询.. 想了下是简单的,就是要注意以前方法的被调用情况,进行增量改动,以免牵一发而动全身.整理一波记录下(本次案例是按名字模糊查询学生信息). 三种 ...
- springboot+mybatisplus+sharding-jdbc分库分表实例
项目实践 现在Java项目使用mybatis多一些,所以我也做了一个springboot+mybatisplus+sharding-jdbc分库分表项目例子分享给大家. 要是用的springboot+ ...
- MyBatis Plus之like模糊查询中包含有特殊字符(_、\、%)
传统的解决思路:自定义一个拦截器,当有模糊查询时,模糊查询的关键字中包含有上述特殊字符时,在该特殊字符前添加\进行转义处理. 新的解决思路:将like 替换为 MySQL内置函数locate函数 参考 ...
- SpringBoot JPA + 分页 + 单元测试SpringBoot JPA条件查询
application.properties 新增数据库链接必须的参数 spring.jpa.properties.hibernate.hbm2ddl.auto=update 表示会自动更新表结构,所 ...
随机推荐
- 🔥🔥Java开发者的Python快速实战指南:实用工具之PDF转DOCX文档(可视化界面)
首先,大家对Python语法的了解已经基本完成,现在我们需要开始进行各种练习.我为大家准备了一些练习题目,比如之前的向量数据库等,这些题目可以参考第三方的SDK来进行操作,文档也是比较完善的.这个过程 ...
- 大语言模型底层架构丨带你认识Transformer
本文分享自华为云社区<大语言模型底层架构你了解多少?大语言模型底层架构之一Transfomer的介绍和python代码实现>,作者: 码上开花_Lancer . 语言模型目标是建模自然语言 ...
- 吉特日化MES & SQL Server中的数据类型
一. 整数数据类型 1.bit bit数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或False .On 或Off.注意:很省空间的一种 ...
- MongoDB中的分布式集群架构
MongoDB 中的分布式集群架构 前言 Replica Set 副本集模式 副本集写和读的特性 Sharding 分片模式 分片的优势 MongoDB 分片的组件 分片键 chunk 是什么 分片的 ...
- AVL树和红黑树的Python代码实现
AVL树 AVL树是一种自平衡二叉搜索树.在这种树中,任何节点的两个子树的高度差被严格控制在1以内.这确保了树的平衡,从而保证了搜索.插入和删除操作的高效性.AVL树是由Georgy Adelson- ...
- 在arm架构的银河麒麟系统部署Redis
以下是在arm架构的银河麒麟系统上部署Redis的详细步骤: 1. 创建文件夹 首先,在合适的位置创建必要的文件夹.在本例中,我们将创建/opt/redis和/usr/src/redis两个文件夹. ...
- 从零玩转设计模式之简单工厂设计模式-jiandangonchangmoshi
title: 从零玩转设计模式之简单工厂设计模式 date: 2022-12-08 11:31:19.472 updated: 2022-12-11 23:03:34.805 url: https:/ ...
- startx详解
linux下startx命令详解 用途 初始化一个 X 会话. 语法 startx [ -d Display:0 ] [ -t | -w ] [ -x Startup | [ -r Resources ...
- Tailscale 基础教程:Headscale 的部署方法和使用教程
Tailscale 是一种基于 WireGuard 的虚拟组网工具,它在用户态实现了 WireGuard 协议,相比于内核态 WireGuard 性能会有所损失,但在功能和易用性上下了很大功夫: 开箱 ...
- 如何抑制特定 clang-tidy 警告
️ clang-tidy 的规则能够帮助检查潜在的问题,不要盲目抑制警告! 可以通过添加 NOLINT, NOLINTNEXTLINE, 以及 NOLINTBEGIN - NOLINTEND 注释来抑 ...