mybatis模糊查询查询不到数据

本文解决了一个在使用MyBatis进行模糊查询时遇到的问题,即查询结果为空,而直接使用SQL则能正常获取数据。问题的根源在于JDBC连接URL中未包含字符编码设置。通过在URL中添加?characterEncoding=utf8,成功解决了该问题。

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

今天在使用mybatis模糊查询的时候,返回[],但是使用sql在数据库中是可以查询到数据的,原因竟然是jdbc的url中没有添加字符编码。。。

url: jdbc:mysql://ip:port/test?characterEncoding=utf8

加上?characterEncoding=utf8就可以了。

代码如下:

xml里:

<select id="findVendorByName" parameterType="string" resultMap="BaseResultMap">
  select
  <include refid="Base_Column_List" />
  from base_vendor
  where vendor_name like concat('%',#{name},'%')
</select>

Mapper调用:

List<BaseVendor> findVendorByName(String name);
### MyBatis 实现模糊查询的方法 #### 使用 `#{}占位符` 和 `%` 符号组合实现预编译 SQL 查询MyBatis 中,为了防止 SQL 注入攻击并提高安全性,推荐使用带有 `#{}` 占位符的预编译 SQL 来构建模糊查询条件。这种方式可以确保参数被正确转义处理。 ```xml <select id="findUsersByName" parameterType="string" resultType="User"> SELECT * FROM users WHERE username LIKE CONCAT(&#39;%&#39;, #{name}, &#39;%&#39;) </select> ``` 此代码片段展示了如何利用 `CONCAT()` 函数将通配符百分比符号 (`%`) 添加到输入的名字两端,从而形成完整的模糊匹配模式[^2]。 #### 利用 `${}` 字符串拼接方式(不建议) 虽然可以通过 `${}` 将变量直接嵌入到 SQL 语句中完成模糊查询操作,但这容易引发安全风险——特别是当应用程序未能妥善过滤用户提交的数据时可能会遭受 SQL 注入威胁。因此,在实际开发过程中应谨慎考虑这种方法的应用场景[^3]。 #### Java 测试类中的调用实例 下面是一个简单的单元测试案例,它演示了怎样通过传递含有特定字符序列作为前缀或后缀的方式来进行模糊查找: ```java @Test public void testLikeOne(){ try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { StudentDao dao = sqlSession.getMapper(StudentDao.class); String namePattern = "%李%"; List<Student> students = dao.selectLikeOne(namePattern); students.forEach(student -> System.out.println(student)); } } ``` 这段程序先获取了一个数据库会话对象,接着定义好用于筛选的目标姓名模板,并最终打印出符合条件的学生记录列表[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值