博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate09--连接查询
阅读量:6145 次
发布时间:2019-06-21

本文共 7533 字,大约阅读时间需要 25 分钟。

创建实体类

package cn.bdqn.bean;import java.util.ArrayList;import java.util.Date;import java.util.List;/** * @author 小豆腐 * *员工的实体类 */public class Emp {    private Integer empNo;     private String empName;    private String job;    private Double salary;    private Date hireDate;        //多个员工属于一个部门    private  Dept dept;    public Integer getEmpNo() {        return empNo;    }    public void setEmpNo(Integer empNo) {        this.empNo = empNo;    }    public String getEmpName() {        return empName;    }    public void setEmpName(String empName) {        this.empName = empName;    }    public String getJob() {        return job;    }    public void setJob(String job) {        this.job = job;    }    public Double getSalary() {        return salary;    }    public void setSalary(Double salary) {        this.salary = salary;    }    public Date getHireDate() {        return hireDate;    }    public void setHireDate(Date hireDate) {        this.hireDate = hireDate;    }    public Dept getDept() {        return dept;    }    public void setDept(Dept dept) {        this.dept = dept;    }    public Emp(Integer empNo, String empName, String job, Double salary,            Date hireDate, Dept dept) {        super();        this.empNo = empNo;        this.empName = empName;        this.job = job;        this.salary = salary;        this.hireDate = hireDate;        this.dept = dept;    }    public Emp() {        super();    }    @Override    public String toString() {        return "Emp [empNo=" + empNo + ", empName=" + empName + ", job=" + job                + ", salary=" + salary + ", hireDate=" + hireDate + ", dept="                + dept + "]";    }}

 

package cn.bdqn.bean;import java.util.HashSet;import java.util.Set;import com.sun.org.apache.bcel.internal.generic.NEW;/** *  *  部门的实体类 */public class Dept {        private  Integer  deptNo;    private  String  deptName;    private  String  location;      //一个部门对应多个员工    private  Set
emps=new HashSet<>(); public Integer getDeptNo() { return deptNo; } public void setDeptNo(Integer deptNo) { this.deptNo = deptNo; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public Set
getEmps() { return emps; } public void setEmps(Set
emps) { this.emps = emps; } public Dept(Integer deptNo, String deptName, String location, Set
emps) { super(); this.deptNo = deptNo; this.deptName = deptName; this.location = location; this.emps = emps; } public Dept() { super(); } @Override public String toString() { return "Dept [deptNo=" + deptNo + ", deptName=" + deptName + ", location=" + location + ", emps=" + emps.size() + "]"; } }

创建对应的数据库表

 

创建对应的映射文件

在hibernate.cfg.xml文件中 管理两个映射文件之后,创建测试类代码

public class EmpTest {    Session session =null;    Transaction transaction=null;        @Before    public  void  before(){         session = HibernateSessionUtil.getCurrentSession();         transaction= session.beginTransaction();    }        /**     * 先给两个表中 增加测试数据     */    @Test    public  void  testAdd(){        /**         * 因为我们设置了级联操作 cascade=all         * 那么我们就可以在保存部门信息的时候保存员工         */        Dept dept=new Dept();        dept.setDeptNo(2);        dept.setDeptName("市场部");        dept.setLocation("2楼");        //创建员工        Emp emp1=new Emp(5, "员工5", "程序猿5", 5000.0,dept);        Emp emp2=new Emp(6, "员工6", "程序猿6", 545000.0,dept);        Emp emp3=new Emp(7, "员工7", "程序猿7", 2000.0,dept);        Emp emp4=new Emp(8, "员工8", "程序猿8", 98000.0,dept);        Set
emps=new HashSet<>(); emps.add(emp1); emps.add(emp2); emps.add(emp3); emps.add(emp4); dept.setEmps(emps); //把所有的员工放入了集合中 session.save(dept); transaction.commit(); } /** * 所有的迫切连接返回的都是一个对象! 有fetch===》迫切连接 * 所有的非迫切连接返回的都是一个数组! * * * 01.使用内连接查询 两个表的所有数据 * sql语句 * select * from emp inner join dept on dept.deptno=emp.deptno hql语句 from Emp e inner join e.dept(Emp类中的关联属性名) */ @Test public void test01(){ String hql="from Emp e inner join e.dept"; List
list = session.createQuery(hql).list(); for (Object[] objects : list) { System.out.println(objects[0]); //Emp对象 System.out.println(objects[1]); //Dept对象 } } /** * 02.迫切内连接 返回的就是一个对象 */ @Test public void test02(){ String hql="from Emp e inner join fetch e.dept"; List
list = session.createQuery(hql).list(); for (Emp emp : list) { System.out.println(emp); //Emp对象 } } /** * 03.隐式内连接 返回的就是一个对象 * e.dept.deptNo 通过这个属性 进行关联连接 */ @Test public void test03(){ String hql="from Emp e where e.dept.deptNo=:dNo"; List
list = session.createQuery(hql).setParameter("dNo", 2).list(); for (Emp emp : list) { System.out.println(emp); //Emp对象 } } /** * 04.隐式内连接 投影 查询 查询部门编号为2的所有员工的姓名和薪水 * e.dept.deptNo 通过这个属性 进行关联连接 */ @Test public void test04(){ String hql="select empName,salary from Emp e where e.dept.deptNo=:dNo "; List
list = session.createQuery(hql).setParameter("dNo", 2).list(); for (Object[] objects : list) { System.out.print(objects[0]+"\t"); //姓名 System.out.println(objects[1]); //薪水 } } /** * 05.使用左外连接 查询员工和部门的信息 * 以左表为准,右表中没有对应的数据,返回null! */ @Test public void test05(){ String hql="from Emp e left join e.dept"; List
list = session.createQuery(hql).list(); for (Object[] objects : list) { System.out.print(objects[0]+"\t"); //Emp对象 System.out.println(objects[1]); //Dept对象 } } /** * 06.使用迫切左外连接 查询员工和部门的信息 * 以左表为准,右表中没有对应的数据,对象的属性null! * Emp类中的dept属性为null! */ @Test public void test06(){ String hql="from Emp e left join fetch e.dept"; List
list = session.createQuery(hql).list(); for (Emp emp : list) { System.out.println(emp); //Emp对象 } } /** * 07.使用右外连接 查询员工和部门的信息 * 以右表为准,左表中没有对应的数据,返回null! */ @Test public void test07(){ String hql="from Emp e right join e.dept"; List
list = session.createQuery(hql).list(); for (Object[] objects : list) { System.out.print(objects[0]+"\t"); //Emp对象 System.out.println(objects[1]); //Dept对象 System.out.println("***********************************"); } } /** * 08.使用迫切右外连接 查询员工和部门的信息 * 对象就是null! 虽然可以写 迫切右外连接 但是没有实际的意义! * @Test public void test08(){ String hql="from Emp e right join fetch e.dept"; List
list = session.createQuery(hql).list(); for (Emp emp : list) { System.out.println(emp.getEmpName()); //Emp对象 空指针异常 } } */ }

 

转载于:https://www.cnblogs.com/xtdxs/p/7093575.html

你可能感兴趣的文章
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>