SpringMVC + mybatis 传参中文乱码问题

来源:互联网 发布:win7 网络共享 编辑:程序博客网 时间:2024/06/08 06:06

 这本来是一个很简单的问题,不过我觉得还是有必要记录下来。

    今天在开发博客系统的时候,遇到了参数传递中文乱码的问题。开始我只是直接在web.xml中添加springMVC框架已有的filter来处理,代码都是死的,如下:

    <!-- 处理中文乱码 -->

<filter>  

    <filter-name>CharacterEncodingFilter</filter-name>  

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  

    <init-param>  

        <param-name>encoding</param-name>  

        <param-value>UTF-8</param-value>  

    </init-param>  

</filter>  

<filter-mapping>  

    <filter-name>CharacterEncodingFilter</filter-name>  

    <url-pattern>/*</url-pattern>  

</filter-mapping>

但是即使是添加了中文处理的问题,还是乱码,于是开始认真起来了,打断点,发现参数从前台传递到后台,以及后台获取到的参数都是正确的,没有乱码。但是mybatis打印出来的log却依然显示两个 ??, 果断查看model的xml文件,这个地方的模糊查询的sql是这样的:

<select id="orderByTime" parameterType="map" resultMap="BlogArticleList">

select * from blog_article a, blog_user u where a.article_user_id = u.user_id

<if test="null != title">

                              <!-- #{title} 对sql中的 ? 进行替代, 用 ${title} 会完整的将字符串完成替代 -->

     and article_title like #{title}

</if>

 order by a.article_id ${order} limit #{index}, #{size}

</select>

这个地方的#{title}的格式是在java程序里面处理好了的,即 '%title%'. 问题就出在这个地方.

正确的做法应该是,不在java程序中处理这个字符串,直接传递即可。and article_title like #{title} 应改成: and article_title like '%${title}%'


**注意的是:现在程序已正确,但是mybatis打印出的log显示的参数依然是 ??,可能是mybatis哪个地方的配置的问题吧,不过不影响程序的正确运行

0 0