11.hibernate的连接查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了11.hibernate的连接查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含12002字,纯文字阅读大概需要18分钟。
内容图文
1.创建如下javaweb项目结构
2.在项目的src下创建hibernate.cfg.xml主配置文件
1 <? xml version="1.0" encoding="UTF-8" ?> 2 <! DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" > 3 < hibernate-configuration > 4 < session-factory > 5 < property name ="connection.driver_class" >oracle.jdbc.driver.OracleDriver</property> 6<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property> 7<property name="connection.username">scott</property> 8<property name="connection.password">tiger</property> 9<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>10<property name="show_sql">true</property>11<property name="format_sql">true</property>12<mapping resource="com/entity/Dept.hbm.xml"/>13<mapping resource="com/entity/Emp.hbm.xml"/>14</session-factory>15</hibernate-configuration>
3.在项目的src下的com.util包下创建HibernateUtil.java
1 package com.util; 2 3 import org.hibernate.HibernateException; 4 import org.hibernate.Session; 5 import org.hibernate.SessionFactory; 6 import org.hibernate.cfg.Configuration; 7 8 public class HibernateUtil { 9 private static ThreadLocal<Session> thread=new ThreadLocal<Session>(); 10privatestatic Configuration config=null; 11privatestatic SessionFactory factory=null; 12/**13 * 读取配置文件 14*/15static{ 16try { 17 config=new Configuration().configure("/hibernate.cfg.xml"); 18 factory=config.buildSessionFactory(); 19 } catch (HibernateException e) { 20 System.out.println("读取配置文件失败或创建factory失败"); 21 e.printStackTrace(); 22 } 23 } 24/**25 * 打开session 26 * @return27*/28publicstatic Session getSession(){ 29 Session session =thread.get(); 30if(session==null){ 31 session=factory.openSession(); 32 thread.set(session); 33 } 34return session; 35 } 36/**37 * 关闭session 38*/39publicstaticvoid closeSession(){ 40 Session session =thread.get(); 41 thread.set(null); 42 session.close(); 4344 } 4546 }
4.在项目的src下的com.entity包下创建Dept.java
1 package com.entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Dept { 7 private Integer deptno; 8 private String dname; 9 private String loc; 10 private Set<Emp> emps =new HashSet<Emp>(); 1112public Dept() { 13 } 1415public Dept(Integer deptno, String dname, String loc) { 16this.deptno = deptno; 17this.dname = dname; 18this.loc = loc; 19 } 2021public Dept(Integer deptno, String dname, String loc, Set<Emp> emps) { 22this.deptno = deptno; 23this.dname = dname; 24this.loc = loc; 25this.emps = emps; 26 } 27public Integer getDeptno() { 28return deptno; 29 } 30publicvoid setDeptno(Integer deptno) { 31this.deptno = deptno; 32 } 33public String getDname() { 34return dname; 35 } 36publicvoid setDname(String dname) { 37this.dname = dname; 38 } 39public String getLoc() { 40return loc; 41 } 42publicvoid setLoc(String loc) { 43this.loc = loc; 44 } 45public Set<Emp> getEmps() { 46return emps; 47 } 48publicvoid setEmps(Set<Emp> emps) { 49this.emps = emps; 50 } 5152 @Override 53public String toString() { 54return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]"; 55 } 56575859 }
5.在项目的src下的com.entity包下创建Emp.java
1 package com.entity; 2 3 4 5 public class Emp { 6 private Integer empno; 7 private String ename; 8 private String job; 9 private Integer sal; 10 private Dept dept; 11 12 public Emp() { 13 } 14 15 public Emp(Integer empno, String ename, String job, Integer sal) { 16 super (); 17 this.empno = empno; 18this.ename = ename; 19this.job = job; 20this.sal = sal; 21 } 2223public Emp(Integer empno, String ename, String job, Integer sal, Dept dept) { 24super(); 25this.empno = empno; 26this.ename = ename; 27this.job = job; 28this.sal = sal; 29this.dept = dept; 30 } 3132public Integer getEmpno() { 33return empno; 34 } 3536publicvoid setEmpno(Integer empno) { 37this.empno = empno; 38 } 3940public String getEname() { 41return ename; 42 } 4344publicvoid setEname(String ename) { 45this.ename = ename; 46 } 4748public String getJob() { 49return job; 50 } 5152publicvoid setJob(String job) { 53this.job = job; 54 } 5556public Integer getSal() { 57return sal; 58 } 5960publicvoid setSal(Integer sal) { 61this.sal = sal; 62 } 6364public Dept getDept() { 65return dept; 66 } 6768publicvoid setDept(Dept dept) { 69this.dept = dept; 70 } 7172 @Override 73public String toString() { 74return "Emp [ empno=" + empno + ", ename=" + ename 75 + ", job=" + job + ", sal=" + sal + "]"; 76 } 77787980 }
6.在项目的src下的com.entity包下创建Dept.hbm.xml
1 <? xml version="1.0" encoding="UTF-8" ?> 2 <! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 3 < hibernate-mapping > 4 < class name ="com.entity.Dept" table ="DEPT" > 5 < id name ="deptno" type ="java.lang.Integer" column ="DEPTNO" > 6 < generator class ="assigned" /> 7 </ id > 8 < property name ="dname" type ="java.lang.String" column ="DNAME" /> 9 < property name ="loc" type ="java.lang.String" column ="LOC" /> 10 <!-- 一对多 --> 11 < set name ="emps" inverse ="true" cascade ="save-update" > 12 < key column ="DEPTNO" ></ key > 13 < one-to-many class ="com.entity.Emp" /> 14 </ set > 15 </ class > 16 </ hibernate-mapping >
7.在项目的src下的com.entity包下创建Emp.hbm.xml
1 <? xml version="1.0" encoding="UTF-8" ?> 2 <! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 3 < hibernate-mapping > 4 < class name ="com.entity.Emp" table ="EMP" > 5 < id name ="empno" type ="java.lang.Integer" column ="EMPNO" > 6 < generator class ="assigned" /> 7 </ id > 8 < property name ="ename" type ="java.lang.String" column ="ENAME" /> 9 < property name ="job" type ="java.lang.String" column ="JOB" /> 10 < property name ="sal" type ="java.lang.Integer" column ="SAL" /> 11 <!-- 多对一 --> 12 < many-to-one name ="dept" class ="com.entity.Dept" column ="DEPTNO" /> 13 </ class > 14 </ hibernate-mapping >
8.在项目的src下的com.dao包下创建DpetDao.java
1 package com.dao; 2 3 import java.util.List; 4 5 import org.hibernate.Query; 6 import org.hibernate.Session; 7 8 import com.entity.Dept; 9 import com.util.HibernateUtil; 10 11 public class DpetDao { 12 13 14 public static void main(String[] args) { 15 System.out.println("-----------1.关联查询-----------"); 16//getDept(); 17 System.out.println("-------2.内连接-------"); 18 innerJoin(); 19 System.out.println("-------3.迫切内连接-------"); 20 innerJoinFetch(); 21 System.out.println("-------4.左连接-------"); 22 leftJoin(); 23 System.out.println("-------5.迫切左连接-------"); 24 leftJoinFetch(); 25 System.out.println("-------6.右连接-------"); 26 rightJoin(); 27 28 } 29/** 30 * 6.右连接 31*/ 32privatestaticvoid rightJoin() { 33 Session session=HibernateUtil.getSession(); 34 String hql="from Dept d right join d.emps "; 35 Query query=session.createQuery(hql); 36/*list集合中的每个元素都是一个Object数组,数组的第一个元素时Dept对象, 37 * 第二个元素时Emp对象,Dept对象的emps集合元素没有被初始化, 38 * 即emps集合没有存放关联的Emp对象*/ 39 List<Object[]> list=query.list(); 40 System.out.println("dept对象"+"~~"+"emp对象"); 41for (Object[] obj : list) { 42 System.out.println(obj[0]); 43 System.out.println(obj[1]); 44 } 45 HibernateUtil.closeSession(); 46 47 } 48/** 49 * 5.迫切左连接 50*/ 51privatestaticvoid leftJoinFetch() { 52 Session session=HibernateUtil.getSession(); 53/*Hibernate使用fetch关键字实现了将Emp对象读取出来后立即填充到对应的Dept对象 54 * 的集合属性中,*/ 55 String hql="select distinct d from Dept d left join fetch d.emps "; 56 Query query=session.createQuery(hql); 57 List<Dept> list=query.list(); 58for (Dept dept : list) { 59 System.out.println(dept); 60 } 61 HibernateUtil.closeSession(); 62 } 63/** 64 * 4.左连接 65*/ 66privatestaticvoid leftJoin() { 67 Session session=HibernateUtil.getSession(); 68 String hql="from Dept d left join d.emps "; 69 Query query=session.createQuery(hql); 70/*list集合中的每个元素都是一个Object数组,数组的第一个元素时Dept对象, 71 * 第二个元素时Emp对象,Dept对象的emps集合元素没有被初始化, 72 * 即emps集合没有存放关联的Emp对象*/ 73 List<Object[]> list=query.list(); 74 System.out.println("dept对象"+"~~"+"emp对象"); 75for (Object[] obj : list) { 76 System.out.println(obj[0]); 77 System.out.println(obj[1]); 78 } 79 HibernateUtil.closeSession(); 80 } 81/** 82 * 3.迫切内连接 83*/ 84privatestaticvoid innerJoinFetch() { 85 Session session=HibernateUtil.getSession(); 86/*Hibernate使用fetch关键字实现了将Emp对象读取出来后立即填充到对应的Dept对象 87 * 的集合属性中,*/ 88 String hql="select distinct d from Dept d inner join fetch d.emps "; 89 Query query=session.createQuery(hql); 90 List<Dept> list=query.list(); 91for (Dept dept : list) { 92 System.out.println(dept); 93 } 94 HibernateUtil.closeSession(); 95 } 96/** 97 * 2.内连接 98*/ 99privatestaticvoid innerJoin() { 100 Session session=HibernateUtil.getSession(); 101 String hql="from Dept d inner join d.emps "; 102 Query query=session.createQuery(hql); 103/*list集合中的每个元素都是一个Object数组,数组的第一个元素时Dept对象, 104 * 第二个元素时Emp对象,Dept对象的emps集合元素没有被初始化, 105 * 即emps集合没有存放关联的Emp对象*/106 List<Object[]> list=query.list(); 107 System.out.println("dept对象"+"~~"+"emp对象"); 108for (Object[] obj : list) { 109 System.out.println(obj[0]); 110 System.out.println(obj[1]); 111 } 112 HibernateUtil.closeSession(); 113 } 114/**115 * Exception in thread "main" java.lang.StackOverflowError 116 * 内存溢出:死循环 117 * hiberante双向关联时:打印内容时不能你中有我,我中有你,查询默认是懒加载 118 * 119*/120privatestaticvoid getDept() { 121 Session session=HibernateUtil.getSession(); 122 String hql="from Dept"; 123 Query query=session.createQuery(hql); 124 List<Dept> list=query.list(); 125for (Dept dept : list) { 126 System.out.println(dept); 127 System.out.println(dept.getEmps()); 128 } 129 HibernateUtil.closeSession(); 130131 } 132133 }
9.运行结果如下:remdeme.txt
1 1.内连接 2Hibernate: 3 select 4 dept0_.DEPTNO as DEPTNO0_0_, 5 emps1_.EMPNO as EMPNO1_1_, 6 dept0_.DNAME as DNAME0_0_, 7 dept0_.LOC as LOC0_0_, 8 emps1_.ENAME as ENAME1_1_, 9 emps1_.JOB as JOB1_1_, 10 emps1_.SAL as SAL1_1_, 11 emps1_.DEPTNO as DEPTNO1_1_ 12 from 13 DEPT dept0_ 14 inner join 15 EMP emps1_ 16 on dept0_.DEPTNO=emps1_.DEPTNO 17 2.迫切内连接 18 select 19 dept0_.DEPTNO as DEPTNO0_0_, 20 emps1_.EMPNO as EMPNO1_1_, 21 dept0_.DNAME as DNAME0_0_, 22 dept0_.LOC as LOC0_0_, 23 emps1_.ENAME as ENAME1_1_, 24 emps1_.JOB as JOB1_1_, 25 emps1_.SAL as SAL1_1_, 26 emps1_.DEPTNO as DEPTNO1_1_, 27 emps1_.DEPTNO as DEPTNO0__, 28 emps1_.EMPNO as EMPNO0__ 29 from 30 DEPT dept0_ 31 inner join 32 EMP emps1_ 33 on dept0_.DEPTNO=emps1_.DEPTNO 34 -------4.左连接------- 35Hibernate: 36 select 37 dept0_.DEPTNO as DEPTNO0_0_, 38 emps1_.EMPNO as EMPNO1_1_, 39 dept0_.DNAME as DNAME0_0_, 40 dept0_.LOC as LOC0_0_, 41 emps1_.ENAME as ENAME1_1_, 42 emps1_.JOB as JOB1_1_, 43 emps1_.SAL as SAL1_1_, 44 emps1_.DEPTNO as DEPTNO1_1_ 45 from 46 DEPT dept0_ 47 left outer join 48 EMP emps1_ 49 on dept0_.DEPTNO=emps1_.DEPTNO 5051 -------5.迫切左连接------- 52Hibernate: 53 select 54 distinct dept0_.DEPTNO as DEPTNO0_0_, 55 emps1_.EMPNO as EMPNO1_1_, 56 dept0_.DNAME as DNAME0_0_, 57 dept0_.LOC as LOC0_0_, 58 emps1_.ENAME as ENAME1_1_, 59 emps1_.JOB as JOB1_1_, 60 emps1_.SAL as SAL1_1_, 61 emps1_.DEPTNO as DEPTNO1_1_, 62 emps1_.DEPTNO as DEPTNO0__, 63 emps1_.EMPNO as EMPNO0__ 64 from 65 DEPT dept0_ 66 left outer join 67 EMP emps1_ 68 on dept0_.DEPTNO=emps1_.DEPTNO 69 -------6.右连接------- 70Hibernate: 71 select 72 dept0_.DEPTNO as DEPTNO0_0_, 73 emps1_.EMPNO as EMPNO1_1_, 74 dept0_.DNAME as DNAME0_0_, 75 dept0_.LOC as LOC0_0_, 76 emps1_.ENAME as ENAME1_1_, 77 emps1_.JOB as JOB1_1_, 78 emps1_.SAL as SAL1_1_, 79 emps1_.DEPTNO as DEPTNO1_1_ 80 from 81 DEPT dept0_ 82 right outer join 83 EMP emps1_ 84 on dept0_.DEPTNO=emps1_.DEPTNO
原文:http://www.cnblogs.com/holly8/p/5778112.html
内容总结
以上是互联网集市为您收集整理的11.hibernate的连接查询全部内容,希望文章能够帮你解决11.hibernate的连接查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。