快速体验
- 打开 InsCode(快马)平台 https://www.inscode.net
- 输入框内输入如下内容:
创建一个面向初学者的MyBatis学习项目,包含:1. 基础篇:简单LIKE查询示例;2. 进阶篇:多条件动态模糊查询;3. 实战篇:通讯录搜索案例。要求:1. 每个示例都有详细注释;2. 包含常见错误及解决方法;3. 提供测试用例。技术栈:Spring Boot+MyBatis+Thymeleaf。请用最简单的代码演示核心概念,避免复杂配置。 - 点击'项目生成'按钮,等待项目生成完整后预览效果
最近在项目中用到了MyBatis的模糊查询功能,发现对于新手来说有些细节容易踩坑。今天就用最直白的方式,分享从基础到实战的完整学习路径,配合Spring Boot和Thymeleaf快速实现一个通讯录搜索案例。
一、基础篇:认识LIKE查询
核心语法
MyBatis中使用LIKE关键词配合%通配符实现模糊匹配,比如查询姓名包含"张"的记录。注意SQL注入问题,推荐用#{}占位符而非拼接字符串。基础示例
假设有用户表user,通过Mapper接口定义查询方法,XML中编写SELECT * FROM user WHERE name LIKE CONCAT('%',#{keyword},'%')。这里用CONCAT函数避免手动拼接引号。常见错误
- 漏写通配符导致变成精确查询
- 错误使用
$导致SQL注入风险 - 中文字符搜索需确保数据库编码一致
二、进阶篇:动态多条件查询
组合查询思路
实际业务中常需要根据不同条件动态生成SQL。利用MyBatis的<if>标签,可以灵活组装查询条件。例如同时按姓名和电话搜索:<select> SELECT * FROM contact <where> <if test="name != null"> AND name LIKE CONCAT('%',#{name},'%') </if> <if test="phone != null"> AND phone LIKE CONCAT('%',#{phone},'%') </if> </where> </select>性能优化
- 避免全表扫描:对常用搜索字段加索引
- 大数据量考虑分页查询
- 减少
%前置的模糊查询(如%关键字无法用索引)
三、实战篇:通讯录搜索案例
- 项目结构
用Spring Boot快速搭建: - Entity定义联系人字段(name/phone/address)
- Controller接收前端搜索参数
Thymeleaf展示结果列表
测试技巧
- 边界测试:空关键字、超长字符串
- 特殊字符测试:包含
%或_的搜索词 中文编码测试:确保UTF-8统一
避坑指南
- 数据库连接参数需指定
useUnicode=true&characterEncoding=UTF-8 - 日志配置
logging.level.xxx=DEBUG方便查看生成的实际SQL - 返回结果用
List<Map>灵活接收字段
四、总结拓展
通过这个案例,你会发现MyBatis处理模糊查询既灵活又简单。关键掌握三点:正确使用通配符、防范SQL注入、动态SQL的组装逻辑。后续可以尝试结合Redis缓存热门搜索结果,或者用Elasticsearch实现更复杂的全文检索。
最近在InsCode(快马)平台实践时,发现它的一键部署功能特别适合这种需要前后端联调的小demo。不需要配环境就能直接看到网页效果,调试SQL语句也很直观。他们的在线编辑器内置了MyBatis代码提示,对新手特别友好。
遇到问题随时可以查看实时执行的SQL语句,比本地开发还方便。如果你也在学MyBatis,不妨用这个案例上手试试看。
快速体验
- 打开 InsCode(快马)平台 https://www.inscode.net
- 输入框内输入如下内容:
创建一个面向初学者的MyBatis学习项目,包含:1. 基础篇:简单LIKE查询示例;2. 进阶篇:多条件动态模糊查询;3. 实战篇:通讯录搜索案例。要求:1. 每个示例都有详细注释;2. 包含常见错误及解决方法;3. 提供测试用例。技术栈:Spring Boot+MyBatis+Thymeleaf。请用最简单的代码演示核心概念,避免复杂配置。 - 点击'项目生成'按钮,等待项目生成完整后预览效果
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考