MyBatis中模糊查询使用CONCAT('%',#{str},'%')出错

本文揭示了在SQLserver中使用加号而非CONCAT函数进行字符串连接的解决方案,解决了因SQLserver不支持CONCAT函数而引发的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过我一套乱七八糟毫无思路地查找后,发现不是Mybatis的原因,原来是SQL server不支持CONCAT函数,直接用加号连接就好

### MyBatis 实现模糊查询 #### 使用预编译 SQL 的占位符 `#{}` 进行模糊查询 在 MyBatis 中,为了防止 SQL 注入攻击,推荐使用预编译的 SQL `#{}` 占位符来构建模糊查询条件。这种方式不仅安全而且高效。 ```xml <select id="selectUsersByName" parameterType="string" resultType="User"> SELECT * FROM users WHERE username LIKE CONCAT(&#39;%&#39;, #{name}, &#39;%&#39;) </select> ``` 此配置展示了如何利用 `CONCAT` 函数将通配符 `%` 添加到参数两端,从而实现对用户名的部分匹配[^2]。 #### 利用 `${}` 字符串拼接进行模糊查询 虽然不建议用于处理用户输入的数据以防 SQL 注入风险,但在某些特定场景下可以直接使用 `${}` 来完成简单的字符串替换操作: ```xml <select id="findItemsByTitle" parameterType="String" resultType="Item"> SELECT * FROM items WHERE title like &#39;${title}&#39; </select> ``` 这里假设传入的 `title` 参数已经包含了必要的百分号 `%` 作为通配符[^3]。 #### Java 测试代码示例 对于上述任意一种方式,在应用程序层面可以通过单元测试验证功能是否正常工作。下面是一个基于 JUnit 的例子,它调用了 DAO 接口中的方法来进行带有模式字符的名字搜索[^4]: ```java @Test public void testLikeOne(){ try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { StudentDao dao = sqlSession.getMapper(StudentDao.class); String name = "%李%"; List<Student> students = dao.selectLikeOne(name); students.forEach(student -> System.out.println(student)); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值