6.Hibernate单向的多对一 关联映射
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单向的多对一 关联映射的更多相关文章
- java之hibernate之单向的多对多关联映射
这篇 单向的多对多关联映射 1.如何在权限管理中,角色和权限之间的关系就是多对多的关系,表结构为: 2.类结构 Permission.java public class Permission impl ...
- Hibernate ManyToOne Mappings 多对一关联映射
Hibernate ManyToOne Mappings 多对一关联映射 Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml)2.创建持久化类 ...
- Hibernate框架双向多对多关联映射关系
建立双向多对多关联关系 Project.java (项目表) private Integer proid; private Strin ...
- (Hibernate进阶)Hibernate映射——多对多关联映射(八)
多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...
- 一口一口吃掉Hibernate(六)——多对多关联映射
今天来说说hibernate中的多对多关联映射,多对多关联映射涉及到单向映射和双向映射2种. 首先举个多对多关联例子:用户User和角色Role,一个用户可以属于多个角色,一个角色可以有多个用户.这就 ...
- 【SSH系列】Hibernate映射 -- 多对多关联映射
映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论 ...
- 【SSH进阶之路】Hibernate映射——多对多关联映射(八)
上篇博文[SSH进阶之路]Hibernate映射——一对多关联映射(七),我们介绍了一对多关联映射,它是多对多关联映射的基础. 多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接 ...
- Hibernate一对多单向(双向)关联映射
(1).编写配置文件 Hibernate通过读写默认的XML配置文件hibernate.cfg.xml加载数据库配置信息.代码如下: <hibernate-configuration> & ...
- Hibernate(六)——多对多关联映射
前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...
随机推荐
- Ubuntu中Qt+opencv图像显示
先抛出一个疑问,知道的希望留言解答下 (创建Application->Qt Console Application,代码与下面2.3一样,运行有时会显示图片,但大多数不显示,为什么?) 1.打开 ...
- 有哪些可以将网页另存图片的chrome插件?功能类似网页截图
说实话chrome插件哪些,想找出最好最强的还真不容易,各有千秋.今天就概括性介绍下一些网页打印,图片另存为等常见需求的chrome插件.1.Awesome ScreenshotAwesome scr ...
- U3D音频系统
一.基本信息 1.支持的声音格式 WAV OGG MP3 AIFF MOD S3M xm IT 导入以后,unity会选择的压缩方式: WAV:无损,音质好,文件大,适用于较短文件 OGG.MP ...
- .net core 11
- C#中的DataSet添加DataTable问题
最近在使用DataTable来给前台控件绑定数据,开始时查了网上的一些给DataSet添加DataTable时需要注意的地方,一般都要添加表名并且使用DataTable.Copy()方法,否则会报错, ...
- 关于MPMoviePlayerController类播放视频时,外放没有声音的问题(ios)
一.导入音频资源类 #import "AVFoundation/AVAudioSession.h" 二.在播放视频的方法中加一句支持外放的代码 [[AVAudioSession s ...
- 一个3D视频播放器的演示APK
介绍: 这个APK是把视频显示分割成左右对等的两幅画面.同时无缝显示在屏幕上, 配合类似谷歌的cartdboard "纸片壳" 或市面上的魔镜等3D眼镜来播放视频画面, 根据3D眼 ...
- c#代码发送post请求,上传文件(并带其他参数)
本人对post理解不深,前段时间遇到一个需要用c#代码发送post请求上传文件的业务,于是参考了几篇帖子,加上自身实践写出了如下代码.写的比较low 望各位大大指正^_^. 业务需求: 对方给了一个接 ...
- 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536
原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45) 阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...
- Linux Samba服务主配文件smb.conf中文详解
从网上找到描述比较详细的smb.conf中文解释: 服务名:smb 配置目录:/etc/sabma/ 主配置文件:/etc/sabma/smb.conf #====================== ...