SpringMVC重定向参数中文丢失和MyBatis关联查询时问题总结

                     SpringMVC重定向参数中文丢失和MyBatis关联查询时问题总结

 

一、重定向参数中文丢失

1、 后台重定向需要传递参数时,若有中文字符,需要进行 URLEncoder 编码。

2、 如: java.net.URLEncoder.encode("中文字符", "UTF-8");

3、还需进行一步操作:

             tomcat/conf/server.xml 中 第一个 <Connector>标签增加属性配置: URIEncoding="UTF-8"

4、 如:

<Connector connectionTimeout="20000" port="999" protocol="HTTP/1.1" redirectPort="8453" URIEncoding="UTF-8"/>

5、PS: 也适用于 Struts2 、 Servlet 等进行重定向操作。

 

二、MyBatis关联查询,带上关联表主键

1、使用MyBatis关联查询时,若关联表仅仅只查询一个字段且该字段非主键id时,需带上关联表的主键。

2、如:

SELECT

    yc.id,yc.content,su.photo AS "user.photo" ,su.id AS "user.id"

FROM y_comment yc

LEFT JOIN sys_user su on su.id = yc.cId

WHERE yc.hId = #{hId}

3、user表的photo 字段,可能为null,那么user对象也是null,在转json使用时,可能会遇到 undefined 的问题。

4、PS: 这个仅仅算得上经验之谈,因人而用。

 

三、MyBatis查询时,resultType 的类型起决定性的作用

1、使用MyBatis查询时,注意 resultType 的类型和 dao接口中返回值类型是否一致。

2、如:

       a. dao中 :

public List<String> getRoom(User user);

       b. mybatis xml 配置文件:

<select id="getRoom" resultType="User" parameterType="User">

        select room from sys_user where hId= #{hId}

</select>

3、注意: dao中查询结果是 List<String> , sql 的返回结果也是一个 List<String> , 而 <select> 标签的 resultType=User ,说明返回值是 List<User> 对象,而非 List<String> ; 最终查询的结果是 List<User>。 可以看到和 dao中返回值List<String> 不一致,但是没有报错。 --- 至于为什么,暂时不清楚,但是这是个容易被忽略的大坑!!!

4、MyBatis dao查询中,返回的数据类型以 resultType 为准,和 dao中的返回值类型,没有必然关系。 --- 注意理解泛型的作用,仅仅是在编译阶段限制数据类型,最终编译后,是没有泛型的。 可通过反射,给集合添加数据,跳过泛型限制。

5、例如:

@Test

public void say() throws Exception{

    List<Integer> list = new ArrayList<>();

    list.add(520);

    list.add(1314);

    Method addMethod = list.getClass().getMethod("add", Object.class);

    addMethod.invoke(list, "我爱你一生一世!");

    System.out.println(list);

}

 

6、PS: 4 好像 回答了 3中问题 ^_^ !

 

以上是本人这两天遇到的问题,做个总结! 立字为证,毕竟 --- 好记性不如烂笔头嘛!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章