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 表示会自动更新表结构,所 ...
随机推荐
- Google Colab 现已支持直接使用 🤗 transformers 库
Google Colab,全称 Colaboratory,是 Google Research 团队开发的一款产品.在 Colab 中,任何人都可以通过浏览器编写和执行任意 Python 代码.它尤其适 ...
- 算法2:Hanoi塔
汉诺(Hanoi)塔 一.背景介绍 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了 ...
- 笔记本安装linux
下载 桌面版 Ubuntu 镜像 服务器版 Ubuntu 镜像 使用 Balena Etcher 制作系统安装盘 (1)官方网站下载: 点我下载 (2)下载完毕软件之后,打开软件,选择我们下载好的系统 ...
- vulntarget-c-wp
vulntarget-c 信息收集 扫开的端口有web服务 访问了web页面,发现用的是laravel框架 搜索一下历史漏洞,在gayhub上找到这个可以用,能够执行简单命令 python3 expl ...
- Java的特性、内容和环境的配置
Java的特性和优势 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 JDK包含JRE包含JVM JDK:Java Development Kit JRE:Java Run ...
- 记录一次K8s pod被杀的排查过程
问题描述 今天下午运维反馈说我们这一个pod一天重启了8次,需要排查下原因.一看Kiban日志,jvm没有抛出过任何错误,服务就直接重启了.显然是进程被直接杀了,初步判断是pod达到内存上限被K8s ...
- JavaImprove--Lesson05--Arrays,对象排序,Lambda表达式,方法引用简化Lambda表达式
一.Arrays 用来操作数组的一个工具类 在Java中,没有内置的"Arrays工具类",但有一个名为java.util.Arrays的类,它包含了一些用于操作数组的静态方法.这 ...
- js-audio-pluging(录音)
安装 npm i js-audio-recorder 代码 <template> <div class="BaseRecorder"> <div cl ...
- ChatGPT Prompts整理总结
最近一直在学习ChatGPT Prompt的编写技巧,做了一些验证和整理,分享给大家 Act as a Linux Terminal 英文Prompt I want you to act as a l ...
- 2天完成17TB数据量迁移,华为云数据库是如何做的?
摘要:童年时候,我们会对着墙上挂着的中国地图,来认识一处处山川河流和城市人文.如今,数字化时代下,传统的地图已经不能满足人们的需求,如何获取各种丰富的地理内容和实时动态信息成为现代人普遍的地理信息诉求 ...