ibatis 中 與 的區別

2021-09-02 03:45:33 字數 1511 閱讀 4058

眾所周知,ibatis是對jdbc的封裝,所以要理解ibatis裡面的$與#,首先,我們先分析一下jdbc裡面的statement與preparestatement,

statement stmt=conn.createstatement();

resultset rs=stmt.executequery(sql);

preparestatement ptmt=conn.preparedstatement(sql);

resultset rs=ptmt.executequery();

statement 是preparedstatement的父類,

大家請注意sql放置的位置,前者在executequery方法裡,後者在preparestatement建構函式裡,這就意味著前者是在執行查詢的時候才傳入sql語句,後者在類構建的時候就傳sql語句,而執行查詢方法時並沒有傳入sql語句,所以後者必然是在構建時就已經將sql傳送到資料庫做預編譯,然後在執行查詢方法時,直接從資料庫快取中取。

在開發中一般用preparestatement,原因多數是安全問題。

比如:public void querybyname(string username){ 

string sql = 「select * from student where name= 『 " +username +"  ' ";                                      

statement stmt=conn.createstatement();

resultset rs=stmt.executequery(sql);

這是乙個未經編譯的sql語句,如果傳入的引數是「linqifeng」,「tom」等引數沒有任何問題,但是當傳入

"lin' or 1=1;",問題出現了,傳入"lin' or 1=1;drop table student;",問題更大。

如果:public void querybyname(string username){

string sql = 「select * from student where name= ?" ;

preparestatement ptmt=conn.preparedstatement(sql);

ptmt.setstring("name",username);

resultset rs=ptmt.executequery();

這樣處理,username不再是sql語句的一部分,而是作為乙個字串引數,它不參與sql語句的編譯;

至此,jdbc簡單介紹完畢。下面就講解一下,$與#和前面statement preparedstatement的關係,

#用於變數替換

select * from table where id = #id#

等效於

preparestement = stmt.createpreparestement("select * from table where id = ?")

preparestement.setstring(1,'abc');  

ibatis 中 與 的區別

在ibatis中我們使用sqlmap進行sql查詢時需要引用引數,在引數引用中遇到的符號 和 之間的區分為,可以進行與編譯,進行型別匹配,而 不進行資料型別匹配,例如 select from table where id id 其中如果欄位id為字元型,那麼 id 表示的就是 id 型別,如果id為...

IBATIS中 與 的區別

我們在使用ibatis時會經常用到 和 這兩個符號。一 與 區別說通俗一點就是 中間的變數就是直接替換成值的 會根據變數的型別來進行替換 比如articletitle的型別是string,值是 標題 的時候 articletitle 標題 articletitle 標題 二.的作用實際上是字串拼接,...

IBATIS中 與 的區別

我們在使用ibatis時會經常用到 和 這兩個符號。一 與 區別說通俗一點就是 中間的變數就是直接替換成值的 會根據變數的型別來進行替換 比如articletitle的型別是string,值是 標題 的時候 articletitle 標題 articletitle 標題 二.的作用實際上是字串拼接,...