1.创建如下项目结构

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>

hibernate.cfg.xml

3.在项目的src下的com.entity包下创建Dept.java

 package com.entity;

 public class Dept {
/**
* 部门编号
*/
private int deptno;
/**
* 部门名称
*/
private String dname;
/**
* 部门位置
*/
private String loc;
public Dept() {
}
public Dept(int deptno, String dname, String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int 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;
}
@Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc
+ "]";
} }

Dept

4.在项目的src下的com.entity包下创建Emp.java

 package com.entity;

 import java.util.Date;

 public class Emp {
/**
* 员工编号
*/
private Integer empno;
/**
* 员工姓名
*/
private String ename;
/**
* 员工工作
*/
private String job;
/**
* 员工领导编号
*/
private Integer mgr;
/**
* 员工雇佣日期
*/
private Date hiredate;
/**
* 员工工资
*/
private Integer sal;
/**
* 员工奖金
*/
private Integer comm;
/**
* 部门外键
* 引入部门对象
*/
private Dept dept;
public Emp() {
super();
}
public Emp(Integer empno, String ename, String job, Integer mgr,
Date hiredate, Integer sal, Integer comm, Dept dept) {
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
this.sal = sal;
this.comm = comm;
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 getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
public Integer getComm() {
return comm;
}
public void setComm(Integer comm) {
this.comm = comm;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp [comm=" + comm + ", dept=" + dept + ", empno=" + empno
+ ", ename=" + ename + ", hiredate=" + hiredate + ", job="
+ job + ", mgr=" + mgr + ", sal=" + sal + "]";
} }

Emp.java

5.在项目的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" schema="SCOTT">
<!-- 主键配置 -->
<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"/>
</class>
</hibernate-mapping>

Dept.hbm.xml

6.在项目的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" schema="scott">
<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="mgr" type="java.lang.Integer" column="MGR"/>
<property name="hiredate" type="java.util.Date" column="HIREDATE"/>
<property name="sal" type="java.lang.Integer" column="SAL"/>
<property name="comm" type="java.lang.Integer" column="COMM" not-null="false" /> <!-- 多对一映射:name是emp中外键字段引用的对象,class是对象的类型,column是数据库中对应的外键列字段名 -->
<many-to-one name="dept" class="com.entity.Dept" column="DEPTNO"/>
</class>
</hibernate-mapping>

Emp.hbm.xml

7.在项目的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 {
/**
* 创建线程池来管理Session
*/
private static ThreadLocal<Session> thread=new ThreadLocal<Session>();
/**
* 创建读取配置文件的对象
*/
private static Configuration config=null;
/**
* 创建获取Session的工厂
*/
private static SessionFactory factory=null; /**
* 读取配置文件
*/
static{
try {
config=new Configuration().configure("/hibernate.cfg.xml");
factory=config.buildSessionFactory();
} catch (HibernateException e) {
System.out.println("读取配置文件或创建SessionFactory失败!");
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();
} }

HibernateUtil.java

8.在项目的src下的com.dao包下创建EmpDao.java

 package com.dao;

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.SimpleFormatter; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.entity.Dept;
import com.entity.Emp;
import com.util.HibernateUtil; public class EmpDao { public static void main(String[] args) {
System.out.println("--------------------1.保存:1部门和2员工-----3条sql------------------");
//saveEmp();
System.out.println("----------------2.根据部门编号,查询该部门下的所有员工--2条sql--------------");
//getEmpByDeptNo(1);
System.out.println("----------------3.查询所有员工--5条sql--------------");
//getEmp();
System.out.println("----------------4.删除--------------------------------------");
//deleteEmp(1); System.out.println("-----------------5.修改-----2个sql---------------------");
updateEmp(2); }
/**
* 5.修改
* @param i
*/
private static void updateEmp(int id) {
Session session=HibernateUtil.getSession();
//2.开启事务
Transaction tx=session.beginTransaction();
//查单条
Emp emp=(Emp) session.get(Emp.class, id);
if(emp!=null){
emp.setEname("小猪");
System.out.println("修改成功");
}else{
System.out.println("该条数据不存在");
}
tx.commit();
HibernateUtil.closeSession(); }
/**
* 4.删除
* @param id
*/
private static void deleteEmp(int id) {
Session session=HibernateUtil.getSession();
//2.开启事务
Transaction tx=session.beginTransaction();
//查单条
Emp emp=(Emp) session.get(Emp.class, id);
if(emp!=null){
session.delete(emp);
System.out.println("删除成功");
}else{
System.out.println("该条数据不存在");
}
tx.commit();
HibernateUtil.closeSession(); }
/**
* -3.查询所有员工--2条sql
* 如果会报出: Null value was assigned to a property of primitive type setter of com.entity.Emp.comm异常
* 表示comm奖金字段为null,映射是Integer类型,而实体类里是int类型,int基本数据类型值没有null,所以报错
* 解决方法:将实体类所有字段数据类型改为引用数据类型
*/
private static void getEmp() {
Session session=HibernateUtil.getSession();
String hql="from Emp";
Query query=session.createQuery(hql);
List<Emp> list=query.list();
for (Emp emp : list) {
System.out.println("部门编号:"+emp.getDept().getDeptno()+"\t部门名称:"+emp.getDept().getDname()+"\t员工姓名:"+emp.getEname());
} HibernateUtil.closeSession(); }
/**
* 2.根据部门编号,查询该部门下的所有员工
* 2条sql
* @param i
*/
private static void getEmpByDeptNo(int id) {
//1.开启Session
Session session=HibernateUtil.getSession(); String hql="from Emp e where e.dept.deptno=:pdeptno";
Query query=session.createQuery(hql);
query.setParameter("pdeptno", id);
List<Emp> list=query.list();
for (Emp emp : list) {
System.out.println(emp);
}
//5.关闭Session
HibernateUtil.closeSession(); }
/**
* 1.保存:1部门和2员工-----3条sql
*/
private static void saveEmp() {
//1.开启Session
Session session=HibernateUtil.getSession(); //2.开启事务
Transaction tx=session.beginTransaction(); //3.执行操作
//创建部门对象
Dept dept=new Dept(1, "质控部", "中部"); //保存dept对象
session.save(dept);
System.out.println("Dept保存成功"); Date date=null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse("2013-3-3");
} catch (ParseException e) {
e.printStackTrace();
} //创建员工对象
Emp emp1=new Emp(1, "holly", "教员", 2, date, 2300, 200, dept);
Emp emp2=new Emp(2, "猪猪", "领导", 1, date, 3000, 200, dept); //保存Emp对象
session.save(emp1); //保存Emp对象
session.save(emp2);
System.out.println("Emp保存成功"); //4.提交事务
tx.commit(); //5.关闭Session
HibernateUtil.closeSession();
} }

EmpDao.java

9.结果自己验证...

6.Hibernate单向的多对一 关联映射的更多相关文章

  1. java之hibernate之单向的多对多关联映射

    这篇 单向的多对多关联映射 1.如何在权限管理中,角色和权限之间的关系就是多对多的关系,表结构为: 2.类结构 Permission.java public class Permission impl ...

  2. Hibernate ManyToOne Mappings 多对一关联映射

    Hibernate ManyToOne Mappings 多对一关联映射 Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml)2.创建持久化类 ...

  3. Hibernate框架双向多对多关联映射关系

    建立双向多对多关联关系    Project.java (项目表)                private Integer proid;                private Strin ...

  4. (Hibernate进阶)Hibernate映射——多对多关联映射(八)

    多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...

  5. 一口一口吃掉Hibernate(六)——多对多关联映射

    今天来说说hibernate中的多对多关联映射,多对多关联映射涉及到单向映射和双向映射2种. 首先举个多对多关联例子:用户User和角色Role,一个用户可以属于多个角色,一个角色可以有多个用户.这就 ...

  6. 【SSH系列】Hibernate映射 -- 多对多关联映射

         映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论 ...

  7. 【SSH进阶之路】Hibernate映射——多对多关联映射(八)

    上篇博文[SSH进阶之路]Hibernate映射——一对多关联映射(七),我们介绍了一对多关联映射,它是多对多关联映射的基础. 多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接 ...

  8. Hibernate一对多单向(双向)关联映射

    (1).编写配置文件 Hibernate通过读写默认的XML配置文件hibernate.cfg.xml加载数据库配置信息.代码如下: <hibernate-configuration> & ...

  9. Hibernate(六)——多对多关联映射

    前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...

随机推荐

  1. Time.timeScale、游戏暂停

    原文链接 项目里面一直在用Time.timeScale来做游戏的 1倍 2倍整体加速,今天我仔细看了一下Time.timeScale才发现之前我理解错了一些东西. Time.timeScale可以控制 ...

  2. python 解析html

    #!/usr/local/bin/python2.7 # -*- coding: utf-8 -*-: import requests from pyquery import PyQuery as p ...

  3. MVC-Area

    ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所 ...

  4. 工具-Quick time播放器

    拍屏的视频.素材视频等,用Quick time观看 1.左下角可切换时间/帧编号,直观看到某pose的帧位置: 2.播放进度条上有卡尺,可选择部分视频,显示-仅播放所选部分,点上显示-循环,可以反复观 ...

  5. 分布式缓存Memcached/memcached/memcache详解及区别

    先来解释下标题中的三种写法:首字母大写的Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用于存储缓存数据的“容器”.memcached和memcache ...

  6. openstack私有云布署实践【10.2 计算nova - controller节点配置(办公网环境)】

    一.首先登录controller1创建nova数据库,并赋于远程和本地访问的权限.     mysql -u root -p   CREATE DATABASE nova; GRANT ALL PRI ...

  7. node.js---package.json文件

    描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license项的 ...

  8. dplyr 数据操作 常用函数(5)

    继续来了解dplyr中的其他有用函数 1.sample() 目的是可以从一个数据框中,随机抽取一些行,然后组成新的数据框. sample_n(tbl, size, replace = FALSE, w ...

  9. private set

    表示只读: 例:public string DisplayName { get; private set; }  称为"自动属性" 等同于: private string _Dis ...

  10. vultr vps新增reserved IPs功能,保留服务器原有IP

    高性价比海外vps品牌vultr vps宣布一项新功能叫“reserved IPs”,顾名思义是帮助你保留服务器IP地址,以备后用. 这个需求是因为用户经常新建.删除一个vps服务器,默认分配的是随机 ...