hibernate單錶查詢總結(上)
搭建環境不再贅述,有興趣的可以參考之前的部落格——–hibernate環境搭建(鏈結)
表只包含三個字段——姓名、年齡、成績,在前面的博文裡已經配置了hibernate.cfg.xml檔案,這裡就直接插入資料
public
void
testreadlydata()
session.gettransaction().commit();
} catch (exception e)
}
執行上面的語句,資料就準備好了
核心**
string sql =
"select * from t_student";
// 執行操作
list
list
= session.createsqlquery(sql)
.addentity(student.class).
list();
session.createsqlquery(sql)查詢出來的是乙個鍵值對的(map)集合,欲轉成需要的物件集合,需要執行addentity(student.class)對映
完整**
/**
* 測試單錶查詢之原生查詢
*/@test
public
void
testquerysingletable_sql()
session.gettransaction().commit();
} catch (exception e)
}
——全稱是hibernate query language ,它的特點是對查詢條件進行了物件導向封裝
核心**
string hql =
"from student";
list
list
= session.createquery(hql).
list();
這裡的student是物件名,而不是表名,hql內部已經把查詢的結果封裝成了指定的物件
核心**
list
list = session.createcriteria(student.class).list();
可以看到,qbc是純面對物件的,簡潔到不用寫查詢語句
qbc檢索步驟:
1.呼叫session的createcriteria()方法建立乙個criteria物件。
2.設定查詢條件。restrictions類提供了一系列用於設定查詢條件的靜態方法,
這些靜態方法都返回criterion例項,每個criterion例項代表乙個查詢條件。
criteria的add()方法用於加入查詢條件。
3.呼叫criteria的list()方法執行查詢語句。該方法返回list型別的查詢結果,在list集合中存放了符合查詢條件的持久化物件。
核心**
string sql =
"select * from t_student order by t_age desc";// 預設為公升序 asc
// 執行操作
list
list
= session.createsqlquery(sql).addentity(student.class).
list();
核心**
// 這裡的student是類名
string hql =
"from student order by t_score desc";
list
list
= session.createquery(hql).
list();
有意思的是以下三種情況結果一致!!!【特此說明一下——score是類的屬性,t_score是表的字段】
string hql = "from student order by t_score desc";
string hql = "from student s order by s.score desc";
string hql = "from student order by score desc";
核心**
listlist = session.createcriteria(student.class)
.addorder(order.desc("age")).list();
**查詢往往伴隨著查詢條件,上面的查詢都是查詢全部
核心**
string hql = "from student where age > ? and score < ?"
;listlist = session.createquery(hql).setinteger(0, 15).setdouble(1, 90.0).list();
根據hql的語法規則,採用佔位符時,設定引數時呼叫相應型別的設定方法setinteger(0, 15),第乙個引數是佔位符的位置,第二個是它的值,顯而易見這樣幹的不足之處在於引數過多時很容易搞混淆位置
string hql = "from student where age >:myage and score <:myscore"
;listlist = session.createquery(hql).setinteger("myage", 15).setdouble("myscore", 90.0).list();
別名的好處在於不會混淆,它的語法格式是要求別名必須以冒號開頭,設定引數時仍然需要setinteger、setdouble設定相應型別
string hql = "from student where age >? and score <?"
;listlist = session.createquery(hql).setparameter(0, 15)
.setparameter(1, 90.0).list();
這相對於前面的設定佔位符的不同之處在於設定引數時統一的用了setparameter,需要注意的是這裡的score是double型別,所傳引數必須為double型別,90與90.0是不一樣的!
核心**
string hql =
"from student where age >:age and score <:score";
list
list
= session.createquery(hql).setparameter("age", 15)
.setparameter("score", 90.0).
list();//型別必須完全匹配
語法與別名完全一致,這就是別名,改動只在設定引數的方法 Hibernate查詢總結
1.hibernate中的session查詢?使用實體中物件,對應的配置檔案查詢資料庫對應的表 查詢策略?lazy false lazy true 延遲載入 fetch join outer join true 鏈結查詢 batch size 3 10 批量檢索資料 注意 hibernate會自動將...
mysql總結3 單錶查詢1
crud 增刪改查。create 增加 retrieve 查詢 update 更新 delete 刪除 1.插入一行 比如對t user表插入一行資料,我們可以這樣寫 insert into t user username,password,age,address values tom 123 12...
單錶查詢 LINQ to DataSet
fill the dataset.dataset ds new dataset ds.locale cultureinfo.invariantculture filldataset ds datatable orders ds.tables salesorderheader var query fr...