Hibernate引數繫結示例

2021-10-06 19:59:24 字數 1954 閱讀 9909

沒有引數繫結,您必須像這樣(錯誤**)連線引數string:

string hql = "from stock s where s.stockcode = '" + stockcode + "'";

list result = session.createquery(hql).list();

將未經檢查的值從使用者輸入傳遞到資料庫會引起安全問題,因為它很容易通過sql注入被黑客入侵。 您必須避免上面的錯誤**,而應使用引數繫結。

引數繫結有兩種方法:命名引數或位置引數。

這是最常見且使用者友好的方式。 它使用冒號後跟引數名稱(:example)來定義命名引數。 檢視示例…

示例1 – setparameter

setparameter足夠聰明,可以為您發現引數資料型別。

string hql = "from stock s where s.stockcode = :stockcode";

list result = session.createquery(hql)

.setparameter("stockcode", "7277")

.list();

示例2 – setstring

您可以使用setstring告訴hibernate此引數日期型別為string。

string hql = "from stock s where s.stockcode = :stockcode";

list result = session.createquery(hql)

.setstring("stockcode", "7277")

.list();

示例3 – setproperties

這個功能很棒! 您可以將物件傳遞到引數繫結中。 hibernate將自動檢查物件的屬性並與冒號引數匹配。

stock stock = new stock();

stock.setstockcode("7277");

string hql = "from stock s where s.stockcode = :stockcode";

list result = session.createquery(hql)

.setproperties(stock)

.list();

它使用問號(?)定義命名引數,並且您必須根據位置順序設定引數。 參見示例…

string hql = "from stock s where s.stockcode = ? and s.stockname = ?";

list result = session.createquery(hql)

.setstring(0, "7277")

.setparameter(1, "dialog")

.list();

此方法不支援setproperties函式。 此外,由於繫結引數位置的每次更改都需要更改引數繫結**,因此容易遭到破壞。

string hql = "from stock s where s.stockname = ? and s.stockcode = ?";

list result = session.createquery(hql)

.setparameter(0, "dialog")

.setstring(1, "7277")

.list();

在hibernate引數繫結中,我建議始終使用「命名引數」,因為它更易於維護,並且可以重用已編譯的sql語句(如果僅更改繫結引數)以提高效能。

標籤: 冬眠

翻譯自:

hibernate繫結引數型別

hibernate繫結引數型別 1 使用 指定引數 query query session.createquery from student s where s.age and s.name like query.setinteger 0,18 query.setstring 1,abc 2 使用 ...

Hibernate的JNDI繫結分析

hibernate的jndi名稱繫結是在net.sf.hibernate.impl.sessionfactoryobjectfactory程式裡面實現的,我來分析一下hibernate的繫結jndi的過程 我們獲得sessionfactory一般是這樣寫 configuration conf new...

Hibernate的JNDI繫結分析

hibernate的jndi繫結分析 作者blog hibernate的jndi名稱繫結是在net.sf.hibernate.impl.sessionfactoryobjectfactory程式裡面實現的,我來分析一下hibernate的繫結jndi的過程 我們獲得sessionfactory一般是...