<select id="getQueryBook" parameterType="String" resultMap="bookResult"> select * from book where book_name like CONCAT('%',#{bookName},'%') </select>mapper中的参数会乱码,如何解决
时间: 2023-12-22 15:04:37 浏览: 127
在MyBatis的mapper中,如果参数值出现乱码,可以尝试以下解决方法:
1. 确认前后端字符集是否一致,如果不一致则需要对字符集进行统一。
2. 在前端将查询字符串进行编码,使用encodeURIComponent()函数进行编码。后端在接收到查询字符串后,使用decodeURIComponent()函数进行解码。
3. 在mapper中使用Java内置的URLEncoder类对参数进行编码,例如:
```
select * from book where book_name like CONCAT('%',#{bookName, jdbcType=VARCHAR},'%')
```
在Java代码中,将参数进行编码:
```
String encodedParam = URLEncoder.encode(bookName, "UTF-8");
```
然后将编码后的参数传递给mapper。
4. 如果以上方法无法解决问题,可以尝试在数据源连接字符串中指定字符集,例如:
```
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8
```
这样可以确保MyBatis和数据库之间使用一致的字符集进行数据传输。
相关问题
<select id="getQueryBook" parameterType="String" resultMap="bookResult"> select * from book where book_name = #{bookName} </select>改为模糊查询
可以将SQL语句修改为:
```
<select id="getQueryBook" parameterType="String" resultMap="bookResult">
select * from book where book_name like CONCAT('%',#{bookName},'%')
</select>
```
这样就可以进行模糊查询,匹配包含关键字的书籍名称。
这是vue中的前端代码axios({ method: 'get', url: '/BookShopSystem_war/getQueryBook/' + bookName <select id="getQueryBook" parameterType="String" resultMap="bookResult"> select * from book where book_name like CONCAT('%',#{bookName},'%') </select> 传递的bookName是String但最后会乱码导致查询不到书籍,如何解决
出现乱码的原因可能是因为在HTTP请求中未对参数进行编码。我们可以使用JavaScript的encodeURIComponent()函数来对参数进行编码,以确保它们被正确地传输。
在你的代码中,将`/BookShopSystem_war/getQueryBook/' + bookName`替换为`/BookShopSystem_war/getQueryBook/' + encodeURIComponent(bookName)`应该可以解决你的问题。这将对bookName进行编码,使其在HTTP请求中正确传输,从而避免了出现乱码。
阅读全文