示例sql語句: String sql = "select t.favorites_id,t.project_id,t.user_id from favorites t, report r where t.project_id=r.report_id and t.user_id='"+userId+"'";
想想該怎么改成一個hql語句呢?
其實很簡單,sql和hql是非常相似的(從外形上看),說明他倆會大同小異;但是不同的是,sql是面向過程的寫法,而hql語句則是一種面向對象的寫法,這點又注定了他倆思想上的分道揚鑣。
hql自己的特點:1.一般都是全查,不單獨查某幾個字段;
2.另一點是hql從一個實體類中查詢,而不是表名了;
3.實體類是由from后面的數據庫表所映射的。
所以如下;
String hql = "from Favorites f ,Report r where f.project_id=r.report_id and f.user_id=?"; //這里推薦?的占位符寫法,可有效防止sql注入。
Query query = session.createQuery(hql);
query.setParameter(0, "xxxx");
query.list();
便完成了。
拓展~用占位符的優點:
1、代碼層次清晰,特別是hql語句很長以后
2、效率上會比拼字符串要高些
3、安全性高,防止sql的注入,好比你的hql語句的查詢條件是從前台獲取的由用戶填寫的
例如登陸的時候你需要驗證用戶名和密碼
1
|
"from User where username = ‘” + username + "
' and password = '
" + password + "
'";
|
如果用戶在條件中添加了類似 or 1=1這樣的,那么這條語句不管用戶和密碼是否填寫正確都會成立都可以登陸成功。