Mybatis 一个搜索框对多个字段进行模糊查询搜索

本文详细解析了MyBatis框架中Mapper.xml文件的配置细节,包括命名空间、ResultMap、ParameterMap、SQL片段和Select语句的具体用法。通过一个具体的例子,展示了如何在Mapper.xml中定义映射关系、参数类型、SQL查询语句以及如何在Java接口中调用这些SQL查询,实现了根据关键字搜索并返回Measure实体列表的功能。

Mapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.it.master.dao.impl.MeasureDaoImpl">
    <resultMap id="AllResult"                 type="com.it.entity.master.measure.Measure">
        <result column="id"                   property="id" />
        <result column="name"                 property="name" />
        <result column="py"                   property="py" />
        <result column="memo"                 property="memo" />
        <result column="create_time"          property="createTime" />
        <result column="edit_time"            property="editTime" />
    </resultMap>
    <parameterMap id="Measure" type="com.it.entity.master.measure.Measure"/>
    <sql id="table">`measure`</sql>
    <select id="measureList" parameterType="java.util.Map" resultMap="AllResult" >
        SELECT
        *
        FROM
        <include refid="table" />
        WHERE
        1
        AND `is_del` = 'N'
        <if test="keywords != null and keywords != ''">
            AND CONCAT(`name`,`py`) LIKE CONCAT ('%', #{keywords},'%')
        </if>
        ORDER BY `id` ASC
    </select>

 

接口:

public interface MeasureDao {
    List<Measure> measureList(String keywords);
}


实现类:

@Repository
public class MeasureDaoImpl extends BaseDao implements MeasureDao {
    @Override
    public List<Measure> measureList(final String keywords) {
        final Map m = new HashMap<>(1);
        m.put("keywords", keywords);
        return super.getSqlSession().selectList(super.getStatement("measureList"), m);
    }

 

<think>好的,我需要帮助用户了解如何在SQL中使用LIKE语法进行模糊搜索。首先,我应该回顾用户提供的引用内容,确保回答准确。引用[1]提到右模糊和左模糊匹配,引用[3]有示例,比如以'e'结尾的查询。引用[2]和[4]则涉及更复杂的模式,比如字符集和范围。 首先,我需要解释LIKE的基本用法,包括百分号和下划线的区别。然后,区分左模糊、右模糊和全模糊,并给出每个的例子。比如右模糊是'张%',左模糊是'%三',全模糊是'%abc%'。这部分可以结合引用中的例子,比如引用[3]中的'%e'作为右模糊的例子。 接下来,可能需要提到转义特殊字符的情况,比如使用ESCAPE关键字,这样用户知道如何处理包含%或_的情况。这部分虽然引用中没有直接提到,但属于常见问题,应该包含进去。 然后,可以介绍更高级的用法,比如字符集匹配,引用[2]和[4]中的例子,比如'[张李王]三'或者'张[a-c]'。这里需要说明不同的数据库可能有不同的支持,特别是SQL Server使用[]而MySQL可能需要REGEXP。 最后,注意事项部分,包括性能问题,避免全模糊导致索引失效,以及大小写敏感性问题。引用[1]提到LIKE是强大的工具,但需要正确使用,所以性能提示很重要。 在生成相关问题的时候,要确保问题覆盖用户可能进一步询问的方向,比如优化性能、使用正则表达式、与等于的区别,以及特定数据库的实现差异。例如,引用[2]提到了正则匹配,可以生成相关问题。 需要确保所有示例都用正确的LaTeX格式,行内用$...$,独立公式用$$...$$,但这里可能例子不多,主要是代码块。检查是否每个引用都正确标注,比如引用[1]到[4]的位置是否准确。比如,字符集的例子来自引用[2]和[4],需要正确标注。 另外,用户提供的引用中有关于右模糊和左模糊的详细说明,需要确保在回答中正确反映这些内容,比如引用[1]中的定义。同时,注意使用中文回答,保持结构清晰,分点说明。 总结步骤: 1. 介绍LIKE基本语法,通配符%和_。 2. 分类型讲解左、右、全模糊匹配,结合引用中的例子。 3. 转义特殊字符的方法。 4. 高级匹配,如字符集和范围,引用相关例子。 5. 注意事项,性能和大小写。 6. 生成相关问题,覆盖优化、正则、比较等。 检查是否有遗漏点,比如是否提到了不同的数据库系统可能有不同的语法,比如MySQL的REGEXP。可能需要提到,但引用中没有直接提到REGEXP,但引用[2]提到了类似正则表达式的用法,所以可以关联到正则匹配的问题。</think>### SQL模糊匹配LIKE语法教程 #### 一、基本语法结构 在SQL中,`LIKE`操作符通过通配符实现模糊匹配,基本语法为: ```sql SELECT column_name FROM table_name WHERE column_name LIKE pattern ``` 通配符包含: - `%`:匹配任意长度字符(包括零字符) - `_`:匹配单个字符 例如:`name LIKE '张%'` 匹配以“张”开头的所有字符串[^1]。 --- #### 二、模糊匹配类型 1. **右模糊匹配** 格式:`字段 LIKE '前缀%'` 用途:匹配以特定字符串开头的值 示例:查找姓氏为“李”的用户 ```sql SELECT * FROM users WHERE name LIKE '李%'; ``` 结果:匹配“李四”、“李小明”等[^3]。 2. **左模糊匹配** 格式:`字段 LIKE '%后缀'` 用途:匹配以特定字符串结尾的值 示例:查找邮箱以`.com`结尾的用户 ```sql SELECT * FROM users WHERE email LIKE '%.com'; ``` 3. **全模糊匹配** 格式:`字段 LIKE '%关键词%'` 用途:匹配包含关键词的值 示例:查找地址中含“北京”的记录 ```sql SELECT * FROM address WHERE detail LIKE '%北京%'; ``` --- #### 三、特殊字符转义 若需匹配`%`或`_`本身,需使用`ESCAPE`关键字定义转义符。 示例:查找包含`25%`的字段 ```sql SELECT * FROM products WHERE description LIKE '%25!%%' ESCAPE '!'; ``` 此处的`!`声明为转义符,`!%`表示匹配`%`字符。 --- #### 四、高级匹配技巧 1. **字符集匹配** 使用`[]`匹配指定字符集(仅部分数据库支持,如SQL Server): ```sql SELECT * FROM users WHERE name LIKE '张[伟强]'; ``` 匹配“张伟”或“张强”[^2]。 2. **范围匹配** 使用`[a-c]`匹配字母范围: ```sql SELECT * FROM books WHERE title LIKE 'Chapter[1-3]'; ``` 匹配“Chapter1”“Chapter2”“Chapter3”[^4]。 --- #### 五、注意事项 1. **性能问题** 避免对大型表使用全模糊匹配(如`%keyword%`),可能导致全表扫描,索引失效。 2. **区分大小写** 部分数据库(如MySQL)默认不区分大小写,可通过`COLLATE`设置调整。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值