??? 1。文件的映射。由于使用 MyEclipse(傻瓜版^_^) 所以 hibernate工具(extensions,Middlegen,tools等)一直沒好好研究這就不獻丑了。
??? 2。Criteria
??? ?? 1)查詢條件通過 Criteria.add 添加 Expression 用于描述條件
??? ??? ??? ??? Expression.( and or like in le lt ..... )
??? ?? ?? ?? ?? 參見:
Criteria查詢??? ?? 2)criteria.setFirstResult(100);
??? ??? ? criteria.setMaxResults(20);
//檢索范圍
??? ??? ? criteria.addOrder(Order.asc("name")); //排序??? ??? ? .add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING)??
//直接嵌入SQL
??? ?? 3)Cat cat = new Cat();
??? ?? ?? ....
??? ???? List results = session.createCriteria(Cat.class).add( Example.create(cat) ).list();
//根據對象查詢??? ?
??? 3。HQL 完全面向對象的,具備繼承、多態和關聯等特性。
??? ?? 1)參見:
HQL??? ?? 2)內連接,inner join
??? ????? 左外連接,left outer join
??? ????? 右外連接,right outer join?
??? ??? ? http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html
??? ?? ?? 代表性的語句??? ?
Hql.hbm.xml
????????<set?name="fkSet"?inverse="true">
????????????<key?column="id"/>
????????????<one-to-many?class="Fk"/>
????????</set>
SQL
alter?table?fk?add?constraint??FK_hf?foreign?key(id)?references?hql(id)
mysql> select * from hql;
+----+----------+
| id | name???? |
+----+----------+
|? 0 | liukaiyi |
|? 1 | heha???? |
+----+----------+
2 rows in set (0.00 sec)
mysql> select * from fk;
+----+------+
| id | name |
+----+------+
|? 0 | yy?? |
|? 1 | xx?? |
+----+------+
2 rows in set (0.00 sec)
//簡單的 結果: 2? liukaiyi:heha
????????Query?qu?=?se.createQuery("select?h.name?"?+
????????????????????????????????????????"?from?Hql?h?,?Fk?f"?+
????????????????????????????????????????"?where?h.id?=?f.id"?);
????????List?list?=??qu.list()?;
????????tr.commit();
????????System.out.println(?list.size()?);
????????System.out.println(?list.get(0)+":"+list.get(1)?);
//給出對象 結果 : hehaQuery?qu?=?se.createQuery("from?Hql?h?where?h.fkSet.name='xx'");
((Hql)list.get(0)).getName()?;
//給出Object 結果:heha xxQuery?qu?=?se.createQuery("select?h.name,f.name?from?Hql?h?join?h.fkSet?f?where?f.name='xx'");
List?list?=??qu.list()?;
tr.commit();
System.out.println(list.size());????
Object[]?objs?=?(Object[])?list.get(0)?;
System.out.println(?objs[0]?+":"+objs[1]?);
//給出 Map? heha xx
????????
????????Query?qu?=?se.createQuery("select?new?map(?h.name?as?hn,f.name?as?fn)from?Hql?h?join?h.fkSet?f?where?f.name='xx'");
????????List?list?=??qu.list()?;
????????tr.commit();
????????System.out.println(list.size());????
????????Map?map?=?((Map)list.get(0));
????????System.out.println(?map.get("hn")?);
????}
//報表語句? 結果: 1????????Query?qu?=?se.createQuery("select?count(*)?from?Hql?h?join?h.fkSet?f?"?+
????????????????????????????????????????"?where?h.name='heha'?and?h.id=f.id?"?+
????????????????????????????????????????"?group?by?h.name?");
????????List?list?=??qu.list()?;
????????tr.commit();
????????System.out.println(?list.get(0)?);
//集合內 結果 liukaiyi:heha
//元素集(elements與indices 函數) 可以使用 any, some, all, exists, in
//EG:? from Player p where 3 > all elements(p.scores) +----+----------+
| id | name???? |
+----+----------+
|? 0 | liukaiyi |
|? 1 | heha???? |
|? 3 | oo?????? |
+----+----------+
?? ????
??? ??? Query?qu?=?se.createQuery("select?h.name?"?+
????????????????????????????????????????"?from?Hql?h"?+
????????????????????????????????????????"?where?h.id?in?elements(h.fkSet.id)?"?);
????????List?list?=??qu.list()?;
????????tr.commit();
????????System.out.println(?list.get(0)+":"+list.get(1)?);
//使用 javaBean 綁定
Query?q?=?s.createQuery("from?foo?Foo?as?foo?where?foo.name=:name?and?foo.size=:size");
q.setProperties(fooBean);?//?fooBean包含方法getName()與getSize()
List?foos?=?q.list();