锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
鍦?hibernate鐨剅eference 涓彁鍒拌繃hql鏄彲浠ョ洿鎺ヤ嬌鐢╠istinct鐨?br />
--
鍏抽敭瀛梔istinct涓巃ll 涔熷彲浠ヤ嬌鐢紝瀹冧滑鍏鋒湁涓嶴QL鐩稿悓鐨勮涔?
select distinct cat.name from Cat cat
select count(distinct cat.name), count(cat) from Cat cat
--
鎵浠?鎴戝氨灝濊瘯浣跨敤
select distinct c.* from Column c, 鍦╤ql涓?浣跨敤 * 蹇呴』瑕佺敤鍒板埆鍚嶇殑
鏌ヨ鍑虹殑緇撴灉鏄?null鏉ョ殑.
鍦╩ysql 涓?榪欑鍐欐硶鏄病鏈夐敊鐨?..鐒跺悗鎴戝啀璇曚簡涓涓?br />
select distinct c from Column c , 榪欐牱寰楀嚭鐨勭粨鏋滄槸闈瀗ull,鏄紜殑.
]]>
HQL涓叧閿瓧鏄笉鍖哄垎澶у皬鍐欑殑錛屼絾鏄睘鎬у拰綾誨瀷鏄尯鍒嗗ぇ灝忓啓鐨勩?br />
1>.綆鍗曞睘鎬ф煡璇?br />
1>).鍗曚竴灞炴ф煡璇?榪斿洖緇撴灉闆嗗睘鎬у垪琛?鍏冪礌綾誨瀷鍜屽疄浣撶被涓浉搴旂殑灞炴х被鍨嬩竴鑷淬傚錛?br />
session = HibernateUtils.getSession();
session.beginTransaction();
//榪斿洖緇撴灉闆嗗睘鎬у垪琛紝鍏冪礌綾誨瀷鍜屽疄浣撶被涓浉搴旂殑灞炴х被鍨嬩竴鑷?br />
List students = session.createQuery("select name from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
String name = (String)iter.next();
System.out.println(name);
}
session.getTransaction().commit();
2>).澶氫釜灞炴ф煡璇?榪斿洖鐨勯泦鍚堝厓绱犳槸瀵硅薄鏁扮粍錛屾暟緇勫厓绱犵殑綾誨瀷鍜屽
搴旂殑灞炴у湪瀹炰綋綾諱腑鐨勭被鍨嬩竴鑷達紝鏁扮粍鐨勯暱搴﹀彇鍐充簬select涓睘鎬х殑涓暟銆傚錛?br />
List students = session.createQuery("select id, name from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
3>).濡傛灉璁や負榪斿洖鏁扮粍涓嶅瀵硅薄鍖栵紝鍙互閲囩敤HQL鍔ㄦ佸疄渚嬪寲Student瀵硅薄錛?br />
浣嗘槸Strudent綾諱腑蹇呴』鎻愪緵鐩稿簲鐨勬瀯閫犲嚱鏁般傚錛?br />
List students = session.createQuery("select new Student(id, name) from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getId() + "," + student.getName());
}
2>.瀹炰綋瀵硅薄鏌ヨ
1>).榪斿洖Student瀵硅薄鐨勯泦鍚?鍙互蹇界暐select,琛ㄥ彲浠ヤ嬌鐢ㄥ埆鍚?鍒悕鍙互鐢╝s涔熷彲浠ヤ笉鐢ㄣ傚錛?br />
List students = session.createQuery("from Student s").list();
//List students = session.createQuery("from Student as s").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
2>).榪斿洖Student瀵硅薄鐨勯泦鍚?浣跨敤select鏌ヨ瀹炰綋瀵硅薄錛屽繀欏婚噰鐢ㄥ埆鍚嶃傚錛?br />
List students = session.createQuery("select s from Student as s").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
3>).涓嶆敮鎸乻elect * from .....榪欐牱鐨勬煡璇㈣鍙ャ傚錛氫笅闈㈢殑璇彞鏄敊璇殑
List students = session.createQuery("select * from Student").list();
4>).list鍜宨terator鐨勫尯鍒?
鎴戜滑鐭ラ亾,session.createQuery()寰楀埌涓猀uery,鑰屼粠Hibernate API涓垜浠彲
浠ュ彂鐜癚uery鏈変袱涓柟娉昹ist()鍜宨terator()鐢ㄤ簬榪斿洖緇撴灉闆嗐傚畠浠殑鍖哄埆鍦?br />
浜庯細
*list姣忔閮戒細鍙戝嚭sql璇彞錛宭ist浼氬悜緙撳瓨涓斁鍏ユ暟鎹紝鑰屼笉鍒╃敤緙撳瓨涓殑鏁版嵁
*iterator鍦ㄩ粯璁ゆ儏鍐典笅鍒╃敤緙撳瓨鏁版嵁,浣嗗鏋滅紦瀛樹腑涓嶅瓨鍦ㄦ暟鎹湁鍙兘鍑虹幇N+1闂
5>).N+1闂
鍦ㄩ粯璁ゆ儏鍐典笅,浣跨敤query.iterator()鏌ヨ錛屾湁鍙兘鍑虹幇N+1闂
1: 棣栧厛鍙戝嚭涓鏉℃煡璇㈠璞d鍒楄〃鐨剆ql璇彞
N: 鏍規嵁id鍒楄〃鍒扮紦瀛樹腑鏌ヨ,濡傛灉緙撳瓨涓笉瀛樺湪涓庝箣鍖歸厤鐨勬暟鎹?閭d箞浼氭牴鎹?br />
id鍙戝嚭鐩稿簲鐨剆ql璇彞
濡傦細
Iterator iter = session.createQuery("from Student").iterate();
while(iter.hasNext()) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
3>.鏉′歡鏌ヨ
1>).鍙互閲囩敤鎷煎瓧絎︿覆鐨勬柟寮忎紶閫掑弬鏁般傚錛?br />
List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
2>).鍙互浣跨敤錛熸柟寮忎紶閫掑弬鏁?鍙傛暟鐨勭儲寮曚粠0寮濮?浼犻掔殑鍙傛暟鍊煎鏋滄槸瀛楃鍨嬬殑錛屼笉鐢?br />
鍗曞紩鍙峰紩璧鋒潵;鍙互浣跨敤鏂規硶閾劇紪紼嬨傚錛?br />
List students = session.createQuery("select s.id, s.name from Student s where s.name like ?")
.setParameter(0, "%1%")
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
3>).鍙互浣跨敤 錛氬弬鏁板悕縐?鐨勬柟寮忎紶閫掑弬鏁板箋傚錛?br />
List students = session.createQuery("select s.id, s.name from Student s where s.name like :myname")
.setParameter("myname", "%1%")
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
4>).濡傛灉浼犻掑涓弬鏁幫紝鍙互浣跨敤setParameterList鏂規硶銆傚錛?br />
List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)")
.setParameterList("myids", new Object[]{1, 2, 3, 4, 5})
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
5>).鍦℉QL涓彲浠ヤ嬌鐢ㄦ暟鎹簱鐨勫嚱鏁?鍍弇ysql涓殑date_format銆傚錛?br />
List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?")
.setParameter(0, "2008-02")
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
6>).鏌ヨ鏌愪釜鏃ユ湡孌電殑鏁版嵁銆傚錛?br />
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//鏌ヨ2008-01-10鍒?008-02-15鍒涘緩鐨勫鐢?br />
List students = session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?")
.setParameter(0, sdf.parse("2008-01-10 00:00:00"))
.setParameter(1, sdf.parse("2008-02-15 23:59:59"))
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
4>.Hibernate涔熸敮鎸佺洿鎺ヤ嬌鐢╯ql鏌ヨ銆傚錛?br />
List students = session.createSQLQuery("select * from t_student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
5>.澶栫疆鍛藉悕鏌ヨ,涓昏瀹屾垚hql璇彞鍜岀▼搴忕殑瑙h﹀悎.
1>).鍦ㄦ槧灝勬枃浠朵腑閲囩敤<query>鏍囩鏉ュ畾涔塇QL璇彞銆傚錛?br />
<query name="searchStudents">
<![CDATA[
SELECT s FROM Student s where s.id<?
]]>
</query>
2>).鍦ㄧ▼搴忎腑閲囩敤session.getNamedQuery()鏂規硶寰楀埌HQL鏌ヨ涓層傚錛?br />
List students = session.getNamedQuery("searchStudents")
.setParameter(0, 10)
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
6>.鏌ヨ榪囨護鍣?br />
1>).鍦ㄥ獎灝勬枃浠朵腑瀹氫箟榪囨護鍣ㄥ弬鏁般傚錛?br />
<filter-def name="filtertest">
<filter-param name="myid" type="integer"/>
</filter-def>
2>).鍦ㄧ被鐨勫獎灝勪腑浣跨敤榪欎簺鍙傛暟銆傚錛?br />
<filter name="filtertest" condition="id < :myid"/><!--<杞箟瀛楃"<"-->
3>).鍦ㄧ▼搴忎腑鍚敤榪囨護鍣ㄣ傚錛?br />
session.enableFilter("filtertest")
.setParameter("myid", 10);
List students = session.createQuery("from Student").list();//浼氬湪璇ession涓墍鏈夌殑鏌ヨ鍚庤嚜鍔ㄥ姞涓婅繃婊ゅ櫒涓殑鏉′歡
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
鍙傝:Student.hbm.xml,FilterQueryTest.java
7>.鍒嗛〉鏌ヨ
1>).setFirstResult()浠?寮濮?br />
2>).setMaxResults姣忛〉鏄劇ず澶氬皯鏉℃暟鎹傚錛?br />
List students = session.createQuery("from Student")
.setFirstResult(1)
.setMaxResults(2)
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
8>.瀵硅薄瀵艱埅鏌ヨ
Hibernate鏀寔瀵硅薄鐨勶紝鍥犳鍙互鐢ㄥ璞″鑸煡璇€傚錛?br />
Student綾繪繪湁Classes綾誨瀷鐨勫睘鎬lasses錛岃孋lasses綾繪湁name灞炴с傛垜浠氳繃classes鐨刵ame鏉ユ煡璇tudent:
List students = session.createQuery("select s.name from Student s where s.classes.name like '%1%'").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
String name = (String)iter.next();
System.out.println(name);
}
9>.榪炴帴鏌ヨ
1>).鍐呰繛鎺?鍙槸鎶婁袱杈歸兘鏈夌殑璁板綍鏌ュ嚭鏉?鍙互鐪佺暐inner錛屽茍涓斿彧瑕佸獎灝勬枃浠朵腑宸茬粡璁懼ソ浜嗚〃涔嬮棿鐨勫叧緋伙紝鏃犻』鐢╫n琛ㄧず鏌ヨ鏉′歡銆傚錛?br />
//List students = session.createQuery("select c.name, s.name from Student s join s.classes c").list();
List students = session.createQuery("select c.name, s.name from Student s inner join s.classes c").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
2>).澶栧乏榪炴帴:鎶婂乏杈硅〃鐨勬墍鏈夎褰曢兘鏄劇ず鍑烘潵銆傚錛?br />
List students = session.createQuery("select c.name, s.name from Classes c left join c.students s").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
3>).澶栧彸榪炴帴:鎶婂彸杈硅〃鐨勬墍鏈夎褰曢兘鏄劇ず鍑烘潵銆傚錛?br />
List students = session.createQuery("select c.name, s.name from Classes c right join c.students s").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
10>.緇熻鏌ヨ
1>).count銆傚錛?br />
Long count = (Long)session.createQuery("select count(*) from Student").uniqueResult();//榪斿洖鐨勬槸鍗曟潯璁板綍
System.out.println(count);
2>).group by銆傚錛?br />
List students =session.createQuery("select c.name, count(s) from Student s join s.classes c " +
"group by c.name order by c.name").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + ", " + obj[1]);
}
11>.DML椋庢牸鐨勬搷浣?灝介噺灝戠敤,鍥犱負緙撳瓨涓嶅悓姝?
update鍜宒elete鍙細鏇存柊鏁版嵁搴撲腑鐨勬暟鎹?鑰岀紦瀛樹腑涓嶄細鏀癸紝姝ゆ椂濡傛灉鍙栧緱璇ユ暟鎹繕鏄紦瀛樹腑鐨?鑰屼笉浼氭槸鏇存柊鍚庣殑錛屽洜姝ょ紦
瀛樹腑鐨勬暟鎹氨鎴愪簡鑴忔暟鎹簡銆傚鏋滄壒閲忔洿鏂扮殑璇濓紝榪樹細緇欏唴瀛樺甫鏉ュ緢澶у帇鍔涖傚錛?br />
session.createQuery("update Student s set s.name=? where s.id < ?")
.setParameter(0, "鏉庡洓")
.setParameter(1, 5)
.executeUpdate();
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛歨ttp://blog.csdn.net/yangfeitarena/archive/2009/04/17/4086334.aspx
2銆佸綋瀵硅薄.hbm.xml閰嶇疆鏂囦歡<class>鍏冪礌鐨刲azy灞炴ц緗負true鏃訛紝璋冪敤load()鏂規硶鏃跺垯榪斿洖鎸佷箙瀵硅薄鐨勪唬鐞嗙被瀹炰緥錛屾鏃剁殑浠g悊綾誨疄渚嬫槸鐢辮繍琛屾椂鍔ㄦ佺敓鎴愮殑綾伙紝璇ヤ唬鐞嗙被瀹炰緥鍖呮嫭鍘熺洰鏍囧璞$殑鎵鏈夊睘鎬у拰鏂規硶錛岃浠g悊綾誨疄渚嬬殑灞炴ч櫎浜咺D涓嶄負null澶栵紝鎵鍦ㄥ睘鎬т負null鍊鹼紝鏌ョ湅鏃ュ織騫舵病鏈塇ibernate SQL杈撳嚭錛岃鏄庢病鏈夋墽琛屾煡璇㈡搷浣滐紝褰撲唬鐞嗙被瀹炰緥閫氳繃getXXX()鏂規硶鑾峰彇灞炴у兼椂錛孒iberante鎵嶇湡姝f墽琛屾暟鎹簱鏌ヨ鎿嶄綔銆傚綋瀵硅薄.hbm.xml閰嶇疆鏂囦歡<class>鍏冪礌鐨刲azy灞炴ц緗負false鏃訛紝璋冪敤load()鏂規硶鍒欐槸绔嬪嵆鎵ц鏁版嵁搴撳茍鐩存帴榪斿洖瀹炰綋綾伙紝騫朵笉榪斿洖浠g悊綾匯傝岃皟鐢╣et()鏂規硶鏃朵笉綆azy涓轟綍鍊鹼紝閮界洿鎺ヨ繑鍥炲疄浣撶被銆?/p>
3銆乴oad()鍜実et()閮戒細鍏堜粠Session緙撳瓨涓煡鎵撅紝濡傛灉娌℃湁鎵懼埌瀵瑰簲鐨勫璞★紝鍒欐煡璇ibernate浜岀駭緙撳瓨錛屽啀鎵句笉鍒拌瀵硅薄錛屽垯鍙戦佷竴鏉QL璇彞鏌ヨ銆?/p>
瑙e喅鍔炴硶
褰撲綘浣跨敤鎵嬪姩浜嬪姟妯″紡鏃訛紝蹇呴』鎶?strong>SelectMethod 灞炴х殑鍊艱緗負 Cursor, 鎴栬呮槸紜繚鍦ㄤ綘鐨勮繛鎺ュ彧鏈変竴涓猄TATEMENT鎿嶄綔銆?/p>
淇敼url
鍔犲叆SelectMethod=cursor鍗沖彲
鍦╡clipse涓嬮氳繃鍦╟fg鏂囦歡涓璾ri鍔犲叆鍗沖彲