mybatis執行任意SQL

2021-10-05 20:05:00 字數 1848 閱讀 4728

一 用乙個方法可靈活方便執任意自定義sql,不需要在xml或介面中宣告,以下是實現,採用註解,xml沒測試,應該類似。

1:宣告乙個介面,裡面包括乙個超級sql方法:

public

inte***ce

sqldao")

list

>

sql(string sql,

@param

("param"

) map

param)

;}

2呼叫
map

params =

newhashmap

<

>()

;//這裡可加任意多引數,與sql中對應

params.

put(

"id"

,"***");

list

> result = medicineboxdao.

sql(

"select * from devlog where id =#"

,params)

;

二 進一步改進時發現怪異的現象,因嘗試採用泛型作為結果轉型 ,這樣在查詢後通過泛型定義可獲得具體的型別 ,可是結果卻出人意料,但又不報錯,希望有高手能指點下。**如下

1:先改造上面的介面方法為泛型。

public

inte***ce

sqldao")

list

sql2

(string sql,

@param

("param"

) map

param);}

//呼叫

list

o2 = medicineboxdao.

sql2

("select * from devlog where id =#"

,params)

;

執行不報錯,但獲得的結果卻是結果集有多個時只有一條資料,並且只有第乙個欄位的值。

當嘗試獲得集合裡面的類時,報類轉換異常。

當獲得結果的class物件時,報錯了
沒有跟進mybatis相關的原始碼,猜測是資料轉換方面沒有識別好。

三 繼續改進,實現泛型轉換

改造介面為如下:

@select("

})default

list

sqlfromobject

(string sql,

@param

("param"

) map

param,class

sc)catch

(exception e)})

;return lis;};

@select("

})@resulttype

(linkedhashmap.

class

)void

generalsql

(string sql,

@param

("param"

) map

param, resulthandler

handler)

;

然後呼叫:

list

o2 = medicineboxdao.

sqlfromobject

("select * from devlog where id <>#"

,params,devlog.

class

);

還算完美吧!!

Mybatis 特殊SQL的執行

1.模糊查詢 測試模糊查詢 param mohu return list testmohu param mohu string mohu select id testmohu resulttype user select from t user where username like select ...

DeDecms任意SQL語句執行漏洞

dedecms任意sql語句執行漏洞描述 目標存在sql注入漏洞。1.sql注入攻擊就是攻擊者通過欺騙資料庫伺服器執行非授權的任意查詢過程。收起 2.漏洞形成原因 由於dedecmsv5.6的全域性機制可以任意給其賦值,而且高階搜尋功能 plus advancedsearch.php中的 sql變數...

mybatis執行原理

1 獲取sqlsessionfactory物件 解析檔案的每乙個資訊儲存在configuration中,返回包含configuration的defaultsqlsessionfactory 2 獲取sqlsession物件 返回乙個defaultsqlsession物件,包含executor和con...