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中问题 ^_^ !
以上是本人这两天遇到的问题,做个总结! 立字为证,毕竟 --- 好记性不如烂笔头嘛!