沒有引數繫結,您必須像這樣(錯誤**)連線引數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一般是...