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中问题 ^_^ !

 

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值