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中問題 ^_^ !

 

以上是本人這兩天遇到的問題,做個總結! 立字爲證,畢竟 --- 好記性不如爛筆頭嘛!

 

 

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