mybatis先判斷輸入值還是先盤類型
mybatis輸入時先判斷輸入值類型,需要用parameterType規范,再判斷輸入值是否符合類型
MyBatis怎么防止SQL注入
用#{參數}進行預編譯就可以防止了,千萬別用${}這種方式注入參數。
mybatis框架作為一款半自動化的持久層框架,其sql語句都要我們自己來手動編寫,這個時候當然需要防止sql注入。其實Mybatis的sql是一個具有“輸入+輸出”功能,類似于函數的結構,如下:
selectid,title,author,content
fromblogwhereid=#{id}
這里,parameterType標示了輸入的參數類型,resultType標示了輸出的參數類型。回應上文,如果我們想防止sql注入,理所當然地要在輸入參數上下功夫。上面代碼中高亮部分即輸入參數在sql中拼接的部分,傳入參數后,打印出執行的sql語句,會看到sql是這樣的:
selectid,title,author,contentfromblogwhereid=?
不管輸入什么參數,打印出的sql都是這樣的。這是因為mybatis啟用了預編譯功能,在sql執行前,會先將上面的sql發送給數據庫進行編譯,執行時,直接使用編譯好的sql,替換占位符“?”就可以了。因為sql注入只能對編譯過程起作用,所以這樣的方式就很好地避免了sql注入的問題。
mybatis返回值什么時候用parametertype
mybatis查詢數據返回時,需要用resulttype確定返回值的類型,parametertype用于確認請求值的類型
java的反射到底是有什么用處怎么用
Java反射說的是在運行狀態中,對于任何一個類,我們都能夠知道這個類有哪些方法和屬性。對于任何一個對象,我們都能夠對它的方法和屬性進行調用。我們把這種動態獲取對象信息和調用對象方法的功能稱之為反射機制。
可以不通過new關鍵字獲取對象并且使用類對象中的成員變量,方法,修飾符等等,在這里舉例獲取類。
第一種:使用Class.forName(StringclassPath)ClassPath:寫需要反射的類名,一般是以包名.類名。如:Classclazz=Class.forName("com.entity.Example");
第二種:直接使用Classclz=類名.class
這種情況一般在我們知道有這個類的時候去使用。如:Classclz=Example.class;
第三種:Classclz=對象.getClass();
前提是對象已經被實例化出來了。如:
Exampleex=newExample();
Classclz=ex.getClass();
這三種方法都有各自的優點,一般我們使用第一種比較多,按照自己的實際需求去使用才是最好的。反射有啥用?有啥應用場景?
1.spring框架的ioc是基于java的反射機制。
2.JDBC的數據庫的連接注冊驅動,獲取連接也是基于Java反射。
3.Hibernate,Mybatis都有運用到反射。
xml-mybatis接口傳遞兩個參數parameterType怎么處理
可以將其封裝為一個map集合,變量名為key,在配置中應該使用map作為parameterType
mybatis parametertype可以不寫嗎
剛測試了下,可以不寫,但是不規范,說不定什么時候就禁止這種方式操作數據庫了呢