-
OGNL表達式
查看全部 -
網頁亂碼:在talk.jsp頁面添加這句;<%@ page contentType="text/html; charset=UTF-8" %>
查看全部 -
jdbc的數據庫連接地址后面加?useUnicode=true&characterEncoding=UTF-8
Message.xml的select標簽中間select語句最后沒加where 1=1
正確的sql語句是select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE where 1=1 and COMMAND=? 。
查看全部 -
jsp介紹
查看全部 -
Mybatis 常見問題
查看全部 -
Mybatis #{} 與 ognl
建議統一寫法:_parameter
查看全部 -
Mybatis #{} 與 ${}
#{}: 預編譯的。自動數據類型轉換。防止sql注入,優先使用。
${}: 直接拼接的。需自行判斷數據類型。使用場景:order by,傳入數據庫對象(如:列名,表明),模糊查詢,分頁等。
查看全部 -
Mybatis 常用標簽
查看全部 -
Mybatis 中的 OGNL 表達式
查看全部 -
Mybatis 中的 OGNL 表達式
查看全部 -
Mybatis 之 SqlSession
查看全部 -
OGNL表達式
查看全部 -
【知識點1】
<a href="">屬于GET方式請求,參數通過在路徑中傳遞(可以通過js進行提交,并進行提示,如下圖)。
【知識點2】
使用<a>標簽提交form表單信息,使用js修改提交的action,如下圖
查看全部 -
【知識點1】
通過Properties類獲取數據信息。
InputStream is=當前類.class.getClassLoader.getResourceAsStream("Properties文件位置")
Properties properties=new Properties();
properties.load(is);
properties.getProperty("Properties文件的key值");
【知識點二】
RequestDispatcher rd=request.getRequestDispatcher();
該對象的forward(request,response)和include(request,response)的區別?
這兩個方法都是用來跳轉資源的,但是forward方法執行完,該Servlet后面的response輸出不會被執行,如果跳轉的是另一個Servlet,另一個Servlet里也有response輸出,則這個輸出會執行,這里的不會執行只是執行forward方法的Servlet后面的response輸出不會執行。如果換成include方法,則這兩個Servlet里response輸出都會被執行。如果在跳轉的Servlet里把response.getWriter獲得的對象close掉,則原來的Servlet也不會進行輸出。
servlet A
RequestDispatcher disp = request.getRequestDispatcher("B");
disp.forward(request, response);
System.out.println("servlet A completed");
PrintWriter pw = response.getWriter();
pw.println("servlet A");
servlet B
PrintWriter?pw?= response.getWriter();
pw.println("servlet B");
輸出結果:
控制臺:servlet A completed頁面:servlet B
如果將forward換成include的話,則結果為:
控制臺:servlet A completed
頁面:servlet B servlet A
PS:如果在servlet B里把pw給close掉了的話,那servlet A 這里就無法輸出了,則結果就和第一個一樣。【知識點三】
JSTL和EL
JSTL——
for循環標簽:<c:forEach items="" ?var="" ?varStatus="">
items:值為傳過來的集合,可以通過EL表達式或者JSP表達式獲取(${list}或者<%=request.get...%>)
var:代表集合中的每一項的名稱,如果集合中是基本類型,則可以通過${變量名}取值,如果是自定義的類,則可以通過${變量名.屬性名}。
varStatus:相當于一個變量,它的初始值是0,獲取它的值方式,名稱.index,通常用它和<if>標簽實現隔行變色功能。
if條件標簽:<if test="表達式"></if>它可以嵌在標簽里面。
EL——通過${}獲取傳到頁面的值。
查看全部 -
Mybatis總結——常見問題解析
【1】獲取自增主鍵值
案例描述:一對多新增功能,整個頁面一次性提交,后端分別保存主表數據與子表數據,設計表的主鍵還是自動遞增的,否則就不在討論范圍內了,問題的根源是保存主表數據后,需要知道插入這條數據的自增主鍵值,然后再保存子表數據,因為這個主鍵值作為子表的外鍵。
Mybatis執行insert語句后,獲取自增主鍵值:
以command表為例,因為command表是一對多關系中的主表,首先插入主表的數據,正常情況下如圖1,但是想要獲取插入的自增主鍵值需要使用<insert>標簽的useGeneratedKeys屬性,把它設置為true,作用是主鍵采用自動生成,而不是自己指定的主鍵值。通過<insert>的keyProperty屬性Mybatis會獲取自動生成的主鍵,該屬性值為填充到映射關系中的哪個屬性中,所以為屬性名(這樣在Command對象傳入XML中id是沒有值的,當SqlSession調用方法執行完sql以后,這個id屬性就有值了并且這個值為新增的主鍵值)。
【2】找不到namespace.id的異常效果
如果不在Mybatis核心配置文件中引入sql的XML文件,或者namespace.id寫錯都會報該異常,如下圖
【3】排查SQL語法錯誤
這里可以通過log4j輸出的sql語句排查錯誤(可以把sql語句復制到Navicat中進行驗證)。
【4】不要過度使用${}
比如做表頭排序時會在order by后拼接${},它就像java中用變量拼接字符串一樣,有些會習慣寫jdbc的代碼,直接在java代碼里寫select...,把它寫好后傳值給XML,然后XML中直接使用${傳進來sql語句字符串},這樣的編寫風格會出現維護困難,因為這樣一部分sql語句在java代碼中,一部分語句在XML中。Mybatis提供了把sql語句寫在java代碼中,這種編寫方式稱作注解sql,但是這種編寫方式很麻煩。
【5】亂碼問題
關注文件本身的編碼。
JSP頁面設置的編碼。
Servlet接受頁面傳值時,轉換的編碼。
GET請求提交中文參數時,Tomcat里也要進行配置編碼。
除此之外,與數據庫進行交互時 ,出現亂碼時,應注意以下幾處:
Mybatis核心配置文件里導入數據庫的url中指定編碼方式。
Mysql安裝時,字符集設置應統一。
建立數據庫時的編碼和建表時的編碼。
查看全部
舉報