//dao层
package com.kgc.dao;
import java.util.List;
import java.util.Map;
import org.hibernate.Criteria;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import com.kgc.common.HibernateSessionFactory;
import com.kgc.po.Dept;
import com.kgc.po.Emp;
public class DeptDao {
public List testJoin(){
return HibernateSessionFactory.getSession()
/*若不写CriteriaSpecification.xx方法,默认是内连接查询
* CriteriaSpecification.LEFT_JOIN 左外连接查询
* CriteriaSpecification.FULL_JOIN 包括左外连接和右连接
* createCriteria和createAlias(arg0, arg1)效果完全相同
*/
.createCriteria(Dept.class,"d")
.createCriteria("d.emps", "e",CriteriaSpecification.LEFT_JOIN)
// .add(Restrictions.ilike("dname", "c",MatchMode.ANYWHERE))
.add(Restrictions.ilike("e.ename", "a",MatchMode.START))
.list();
}
}
//biz层
package com.kgc.biz;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;
import com.kgc.common.HibernateSessionFactory;
import com.kgc.dao.DeptDao;
public class DeptBiz {
public void testJoin(){
Transaction tx = null;
try {
tx=HibernateSessionFactory.getSession().beginTransaction();
List<Object> result = dao.testJoin();
for (Object object : result) {
System.out.println(object);
}
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if(tx!=null){
tx.rollback();
}
}
}
}
//test
package com.kgc.test;
import com.kgc.biz.DeptBiz;
public class DeptTest {
public static void main(String[] args) {
DeptBiz biz = new DeptBiz();
biz.testJoin();
}
}
//运行结果
Hibernate:
select
this_.DEPTNO as DEPTNO1_1_,
this_.DNAME as DNAME1_1_,
this_.LOC as LOC1_1_,
e1_.DEPTNO as DEPTNO1_,
e1_.EMPNO as EMPNO,
e1_.EMPNO as EMPNO0_0_,
e1_.ENAME as ENAME0_0_,
e1_.JOB as JOB0_0_,
e1_.MGR as MGR0_0_,
e1_.HIREDATE as HIREDATE0_0_,
e1_.SAL as SAL0_0_,
e1_.COMM as COMM0_0_,
e1_.DEPTNO as DEPTNO0_0_
from
DEPT this_
left outer join
EMP e1_
on this_.DEPTNO=e1_.DEPTNO
where
lower(e1_.ENAME) like ?
com.kgc.po.Dept@18f6559
com.kgc.po.Dept@3d8f1be9