Hibernate單錶查詢總結(上)

2021-07-28 05:05:47 字數 3932 閱讀 9481

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...