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中問題 ^_^ !
以上是本人這兩天遇到的問題,做個總結! 立字爲證,畢竟 --- 好記性不如爛筆頭嘛!