Mybatis中mapper模糊查询语句LIKE

本文分享了在SSM框架中实现模糊查询的一种方法,并通过具体SQL语句展示了如何使用#{}

最近做学校安排的课程设计作业,用到SSM框架,在自己写mapper代码是遇到了模糊查询的问题 困扰好久


下面是我解决这个问题的方法,其他网上好多方法我尝试过却没有实现

下面试sql语句

select * from goodsinfo where goodsname like '%' #{goodsname} '%'
注意代码中的空格  空格 空格  


#{ } 方式还可以避免sql注入

其他大神路过希望你们能够留下,别的好的方法。

<think>好的,我现在需要处理用户关于MyBatis模糊查询生成方式的问题。首先,用户要求用中文回答,并且遵循特定的格式要求,比如行内数学表达式用$...$,独立公式用$$...$$。不过这里的问题主要涉及MyBatis,可能数学公式用不上,但还是要留意。 接下来,用户的问题是关于MyBatis中如何生成模糊查询语句的示例。我需要结合提供的引用内容来回答。根据引用[1][2][3][5],模糊查询在MyBatis中有几种实现方式,比如使用#{}占位符结合拼接%、使用CONCAT函数、或者使用动态SQL。 首先,我需要确认用户需要的是具体的生成方式示例,所以应该分点列出不同的方法,每个方法给出代码示例。比如,第一种方法是直接在Java代码中拼接%,然后通过#{}传入,这样在SQL中直接LIKE。第二种是在Mapper XML中使用CONCAT函数来处理%,比如LIKE CONCAT('%', #{keyword}, '%')。第三种是使用<bind>标签来预处理参数,避免在SQL中写函数。此外,动态语句如<if>可能需要结合使用,比如根据不同的条件添加不同的模糊查询条件。 然后,要注意引用对应的来源。例如,引用[1]提到使用#{}占位符,引用[2]提到动态语句和模糊查询,引用[3]提到使用CASE WHEN进行模糊查询,引用[5]有具体的测试示例。需要正确地将这些引用标注到对应的部分。 另外,用户要求生成相关问题,我需要根据内容提出三个相关的问题,比如性能优化、不同方式的区别、分页结合模糊查询等。 需要检查LaTeX语法,不过这个问题可能用不到数学公式,所以可能不需要处理。但如果有变量名之类的,可能需要用$包裹,例如$keyword$。 现在,组织回答结构:先介绍模糊查询的重要性,然后分点说明不同的实现方式,每个方式给出示例代码,并标注引用来源。最后生成相关问题。 需要确保代码块使用正确的语法,比如XML和Java的代码示例。同时,检查是否有错别字或格式错误,比如是否漏掉引用标记,或者代码是否正确展示。 最后,按照用户提供的示例结构,先回答,然后“相关问题”部分列出三个问题,用§§符号包围。</think>### MyBatis中模糊查询的生成方式 在MyBatis中实现模糊查询(`LIKE`语句)时,需注意参数格式和SQL注入风险。以下是几种常用方法及其示例: --- #### 1. **Java代码中拼接`%`符号** 在调用Mapper方法前,直接在参数中添加`%`符号,通过`#{}`占位符传递。 **示例**: ```java // Java代码中处理参数 String keyword = "test"; List<User> users = userMapper.selectByName("%" + keyword + "%"); ``` Mapper XML配置: ```xml <select id="selectByName" resultType="User"> SELECT * FROM user WHERE name LIKE #{keyword} </select> ``` *适用场景*:简单查询,但需手动拼接符号[^1][^5]。 --- #### 2. **XML中使用`CONCAT`函数** 在SQL语句中通过`CONCAT`函数动态拼接`%`符号,避免手动处理参数。 **示例**: ```xml <select id="selectByName" resultType="User"> SELECT * FROM user WHERE name LIKE CONCAT('%', #{keyword}, '%') </select> ``` *优势*:参数传递更简洁,无需修改Java代码[^1][^3]。 --- #### 3. **使用`<bind>`标签预处理参数** 通过MyBatis的`<bind>`标签在XML中定义变量,增强可读性。 **示例**: ```xml <select id="selectByName" resultType="User"> <bind name="pattern" value="'%' + keyword + '%'" /> SELECT * FROM user WHERE name LIKE #{pattern} </select> ``` *特点*:适合复杂条件查询,避免重复拼接[^2]。 --- #### 4. **动态SQL结合模糊查询** 结合`<if>`标签实现条件动态拼接,适用于多条件查询。 **示例**: ```xml <select id="selectUser" resultType="User"> SELECT * FROM user <where> <if test="name != null"> name LIKE CONCAT('%', #{name}, '%') </if> <if test="age != null"> AND age = #{age} </if> </where> </select> ``` *适用场景*:需根据不同条件动态生成SQL语句的情况[^2][^3]。 --- #### 5. **注解方式实现模糊查询** 在Mapper接口中使用`@Select`注解直接编写SQL。 **示例**: ```java @Select("SELECT * FROM user WHERE name LIKE CONCAT('%', #{keyword}, '%')") List<User> selectByKeyword(String keyword); ``` *特点*:适合简单接口,减少XML配置[^5]。 --- ### 注意事项 - **防SQL注入**:优先使用`#{}`占位符而非`${}`,避免拼接字符串引发安全问题。 - **性能优化**:模糊查询可能导致全表扫描,建议结合索引或分页(引用[^4]提到分页的重要性)。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值