12.hibernate命名查询
2016-08-16 22:30
288 查看
1.创建如下javaweb项目结构
2.在项目的src下创建hibernate.cfg.xml主配置文件
3.在项目的src下的com.util包下创建HibernateUtil.java
4.在项目的src下的com.entity包下创建Dept.java
5.在项目的src下的com.entity包下创建Emp.java
6.在项目的src下的com.entity包下创建Dept.hbm.xml
7.在项目的src下的com.entity包下创建Emp.hbm.xml
8.在项目的src下的com.dao包下创建DeptDao.java
9.运行结果如下:remdeme.txt
2.在项目的src下创建hibernate.cfg.xml主配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" > <hibernate-configuration> <session-factory> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property> <property name="connection.username">scott</property> <property name="connection.password">tiger</property> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="com/entity/Dept.hbm.xml"/> <mapping resource="com/entity/Emp.hbm.xml"/> </session-factory> </hibernate-configuration>
3.在项目的src下的com.util包下创建HibernateUtil.java
package com.util; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static ThreadLocal<Session> thread=new ThreadLocal<Session>(); private static Configuration config=null; private static SessionFactory factory=null; /** * 读取配置文件 */ static{ try { config=new Configuration().configure("/hibernate.cfg.xml"); factory=config.buildSessionFactory(); } catch (HibernateException e) { System.out.println("读取配置文件失败或创建factory失败"); e.printStackTrace(); } } /** * 打开session * @return */ public static Session getSession(){ Session session =thread.get(); if(session==null){ session=factory.openSession(); thread.set(session); } return session; } /** * 关闭session */ public static void closeSession(){ Session session =thread.get(); thread.set(null); session.close(); } }
4.在项目的src下的com.entity包下创建Dept.java
package com.entity; import java.util.HashSet; import java.util.Set; public class Dept { private Integer deptno; private String dname; private String loc; private Set<Emp> emps =new HashSet<Emp>(); public Dept() { } public Dept(Integer deptno, String dname, String loc) { this.deptno = deptno; this.dname = dname; this.loc = loc; } public Dept(Integer deptno, String dname, String loc, Set<Emp> emps) { this.deptno = deptno; this.dname = dname; this.loc = loc; this.emps = emps; } public Integer getDeptno() { return deptno; } public void setDeptno(Integer deptno) { this.deptno = deptno; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public String getLoc() { return loc; } public void setLoc(String loc) { this.loc = loc; } public Set<Emp> getEmps() { return emps; } public void setEmps(Set<Emp> emps) { this.emps = emps; } @Override public String toString() { return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]"; } }
5.在项目的src下的com.entity包下创建Emp.java
package com.entity; public class Emp { private Integer empno; private String ename; private String job; private Integer sal; private Dept dept; public Emp() { } public Emp(Integer empno, String ename, String job, Integer sal) { super(); this.empno = empno; this.ename = ename; this.job = job; this.sal = sal; } public Emp(Integer empno, String ename, String job, Integer sal, Dept dept) { super(); this.empno = empno; this.ename = ename; this.job = job; this.sal = sal; this.dept = dept; } public Integer getEmpno() { return empno; } public void setEmpno(Integer empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public Integer getSal() { return sal; } public void setSal(Integer sal) { this.sal = sal; } public Dept getDept() { return dept; } public void setDept(Dept dept) { this.dept = dept; } @Override public String toString() { return "Emp [ empno=" + empno + ", ename=" + ename + ", job=" + job + ", sal=" + sal + "]"; } }
6.在项目的src下的com.entity包下创建Dept.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class name="com.entity.Dept" table="DEPT"> <id name="deptno" type="java.lang.Integer" column="DEPTNO"> <generator class="assigned"/> </id> <property name="dname" type="java.lang.String" column="DNAME"/> <property name="loc" type="java.lang.String" column="LOC"/> <!-- 一对多 --> <set name="emps" inverse="true" cascade="save-update"> <key column="DEPTNO"></key> <one-to-many class="com.entity.Emp"/> </set> </class> </hibernate-mapping>
7.在项目的src下的com.entity包下创建Emp.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class name="com.entity.Emp" table="EMP"> <id name="empno" type="java.lang.Integer" column="EMPNO"> <generator class="assigned"/> </id> <property name="ename" type="java.lang.String" column="ENAME"/> <property name="job" type="java.lang.String" column="JOB"/> <property name="sal" type="java.lang.Integer" column="SAL"/> <!-- 多对一 --> <many-to-one name="dept" class="com.entity.Dept" column="DEPTNO"/> </class> <!-- 命名查询节点 --> <query name="findEmpByJob"> <!-- cdata节点放入hql语句,原生sql查询语句 --> <![CDATA[ from Emp e where e.job=:pjob ]]> </query> </hibernate-mapping>
8.在项目的src下的com.dao包下创建DeptDao.java
package com.dao; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import com.entity.Emp; import com.util.HibernateUtil; public class EmpDao { public static void main(String[] args) { System.out.println("-----------1.关联查询-----------"); getEmp(); } /** *1.命名查询 */ private static void getEmp() { Session session=HibernateUtil.getSession(); /*根据映射文件的query节点的name属性值获取hql语句*/ Query query=session.getNamedQuery("findEmpByJob"); /*给命名参数赋值*/ //query.setString("pjob", "CLERK"); query.setParameter("pjob", "CLERK"); List<Emp> list=query.list(); for (Emp emp : list) { System.out.println(emp.getDept().getDeptno()); System.out.println(emp); } HibernateUtil.closeSession(); } }
9.运行结果如下:remdeme.txt
1.内连接 Hibernate: select dept0_.DEPTNO as DEPTNO0_0_, emps1_.EMPNO as EMPNO1_1_, dept0_.DNAME as DNAME0_0_, dept0_.LOC as LOC0_0_, emps1_.ENAME as ENAME1_1_, emps1_.JOB as JOB1_1_, emps1_.SAL as SAL1_1_, emps1_.DEPTNO as DEPTNO1_1_ from DEPT dept0_ inner join EMP emps1_ on dept0_.DEPTNO=emps1_.DEPTNO 2.迫切内连接 select dept0_.DEPTNO as DEPTNO0_0_, emps1_.EMPNO as EMPNO1_1_, dept0_.DNAME as DNAME0_0_, dept0_.LOC as LOC0_0_, emps1_.ENAME as ENAME1_1_, emps1_.JOB as JOB1_1_, emps1_.SAL as SAL1_1_, emps1_.DEPTNO as DEPTNO1_1_, emps1_.DEPTNO as DEPTNO0__, emps1_.EMPNO as EMPNO0__ from DEPT dept0_ inner join EMP emps1_ on dept0_.DEPTNO=emps1_.DEPTNO -------4.左连接------- Hibernate: select dept0_.DEPTNO as DEPTNO0_0_, emps1_.EMPNO as EMPNO1_1_, dept0_.DNAME as DNAME0_0_, dept0_.LOC as LOC0_0_, emps1_.ENAME as ENAME1_1_, emps1_.JOB as JOB1_1_, emps1_.SAL as SAL1_1_, emps1_.DEPTNO as DEPTNO1_1_ from DEPT dept0_ left outer join EMP emps1_ on dept0_.DEPTNO=emps1_.DEPTNO -------5.迫切左连接------- Hibernate: select distinct dept0_.DEPTNO as DEPTNO0_0_, emps1_.EMPNO as EMPNO1_1_, dept0_.DNAME as DNAME0_0_, dept0_.LOC as LOC0_0_, emps1_.ENAME as ENAME1_1_, emps1_.JOB as JOB1_1_, emps1_.SAL as SAL1_1_, emps1_.DEPTNO as DEPTNO1_1_, emps1_.DEPTNO as DEPTNO0__, emps1_.EMPNO as EMPNO0__ from DEPT dept0_ left outer join EMP emps1_ on dept0_.DEPTNO=emps1_.DEPTNO -------6.右连接------- Hibernate: select dept0_.DEPTNO as DEPTNO0_0_, emps1_.EMPNO as EMPNO1_1_, dept0_.DNAME as DNAME0_0_, dept0_.LOC as LOC0_0_, emps1_.ENAME as ENAME1_1_, emps1_.JOB as JOB1_1_, emps1_.SAL as SAL1_1_, emps1_.DEPTNO as DEPTNO1_1_ from DEPT dept0_ right outer join EMP emps1_ on dept0_.DEPTNO=emps1_.DEPTNO
相关文章推荐
- Linux(cent OS)下软件包管理-rpm命令管理-包命名与依赖性/安装升级与依赖/查询/校验与文件提取
- Hibernate中的命名查询
- hql语句查询(命名查询)
- Hibernate中的命名查询
- hql语句命名参数查询示例
- 使用XPath查询带有命名空间(有xmlns)的XML
- 执行xpath时提示,需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数
- hibernate命名查询时总是报类型转换异常:java.lang.ClassCastException
- 使用hql查询---6.4.12: 命名查询
- 利用redis缓存mysql查询结果,关于缓存命名
- hibernate在命名查询named queries中使用native sql
- Hibernate-命名SQL查询
- 使用Hibernate命名查询
- Hibernate 查询HQL,QBC 及命名HQL,SQL查询
- hibernate-命名查询
- JPA的查询语言:JPQL的命名查询 @NamedQuery
- hibernate sql命名查询
- yii数据库查询自学笔记--命名空间
- hibernate10--命名查询
- eclipse + JBoss 5 + EJB3开发指南(12):使用命名查询执行JPQL