http://wlh269.javaeye.com/blog/322050
连接查询(重要)
* 内连接
* 外连接(左连接/右连接)
参见:JoinQueryTest.java
内连接有三种:inner join ,join,“=”
- package com.wlh.hibernate;
- import java.util.Iterator;
- import java.util.List;
- import junit.framework.TestCase;
- import org.hibernate.Session;
- public class JoinQueryTest extends TestCase{
- /**
- * 内联结
- */
- public void testQuery1() {
- Session session = null;
- try {
- session = HibernateUtils.getSession();
- session.beginTransaction();
- //====关键字join==========//
- List students=session.createQuery("select s.name ,c.name from Student s join s.classes c").list();
- for(Iterator iter=students.iterator();iter.hasNext();){
- Object [] o=(Object [])iter.next();
- System.out.println("id="+o[0]+",o[1]"+o[0]);
- }
- session.getTransaction().commit();
- }catch(Exception e) {
- e.printStackTrace();
- session.getTransaction().rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
- /**
- * 内联结
- */
- public void testQuery2() {
- Session session = null;
- try {
- session = HibernateUtils.getSession();
- session.beginTransaction();
- //=======关键字inner join 默认就是内连接,所以inner可以加上,也可以省略======//
- List students=session.createQuery("select s.name, c.name from Student s inner join s.classes c").list();
- for(Iterator iter=students.iterator();iter.hasNext();){
- Object [] o=(Object [])iter.next();
- System.out.println("id="+o[0]+",o[1]"+o[0]);
- }
- session.getTransaction().commit();
- }catch(Exception e) {
- e.printStackTrace();
- session.getTransaction().rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
- /**
- * 内联结
- */
- public void testQuery3() {
- Session session = null;
- try {
- session = HibernateUtils.getSession();
- session.beginTransaction();
- //===========用"="实现内联===========//
- List students=session.createQuery("select s.name ,c.name from Student s ,Classes c where s.classes.id=c.id").list();
- for(Iterator iter=students.iterator();iter.hasNext();){
- Object [] o=(Object [])iter.next();
- System.out.println("id="+o[0]+",o[1]"+o[0]);
- }
- session.getTransaction().commit();
- }catch(Exception e) {
- e.printStackTrace();
- session.getTransaction().rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
- [b][color=red]外联接:能够查出2个表之间不相互关联的记录[/color] [/b]
- <PRE class=java name="code"></PRE>
- <BR>
- <BR> /**
- <BR> * 外联结
- <BR> */
- <BR> public void testQuery4() {
- <BR> Session session = null;
- <BR> try {
- <BR> session = HibernateUtils.getSession();
- <BR> session.beginTransaction();
- <BR> //查询出所有的学生(包括没有班级的学生)
- <BR> List students=session.createQuery("select s.name ,c.name from Student s left join s.classes c").list();
- <BR> for(Iterator iter=students.iterator();iter.hasNext();){
- <BR> Object [] o=(Object [])iter.next();
- <BR> System.out.println("id="+o[0]+",o[1]="+o[1]);
- <BR> }
- <BR> session.getTransaction().commit();
- <BR> }catch(Exception e) {
- <BR> e.printStackTrace();
- <BR> session.getTransaction().rollback();
- <BR> }finally {
- <BR> HibernateUtils.closeSession(session);
- <BR> }
- <BR> }
- <BR>
- <BR>
- <BR>
- <BR> /**
- <BR> * 外联结
- <BR> */
- <BR> public void testQuery5() {
- <BR> Session session = null;
- <BR> try {
- <BR> session = HibernateUtils.getSession();
- <BR> session.beginTransaction();
- <BR> //查询出所有的班级,(包括没有学生的班级)
- <BR> List students=session.createQuery("select s.name ,c.name from Student s right join s.classes c").list();
- <BR> for(Iterator iter=students.iterator();iter.hasNext();){
- <BR> Object [] o=(Object [])iter.next();
- <BR> System.out.println("id="+o[0]+",o[1]="+o[1]);
- <BR> }
- <BR> session.getTransaction().commit();
- <BR> }catch(Exception e) {
- <BR> e.printStackTrace();
- <BR> session.getTransaction().rollback();
- <BR> }finally {
- <BR> HibernateUtils.closeSession(session);
- <BR> }
- <BR> }
- <BR>
- <BR>
- <BR>}