【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及加入、查询
这里举样例用的是:部门与员工的关系。
一个部门能够相应多个员工,这就是非常明显的多对一关联关系。
我们须要建立两个实体类:员工(Employee)、部门(Department)
员工类:Employee.java(在这里边我们添加了一个Department类型的属性,用来做关联)
package cn.itcast.hibernate.domain;
public class Employee {
private int id;
private String name;
private Department depart;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department getDepart() {
return depart;
}
public void setDepart(Department depart) {
this.depart = depart;
}
}
部门类Department.java
package cn.itcast.hibernate.domain;
public class Department {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后,我们要在他们的文件夹下建立他们的映射文件:
Employee.hbm.xml(在这里我们添加了一个<many-to-one />标签用来规定映射)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.itcast.hibernate.domain">
<class name="Employee" table="tb_Employee">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<many-to-one name="depart" column="depart_id" />
</class> </hibernate-mapping>
Department.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.itcast.hibernate.domain"> <class name="Department" table="tb_Department">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
</class> </hibernate-mapping>
最后我们须要建立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">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="connection.username">sa</property>
<property name="connection.password">123456</property> <property name="hbm2ddl.auto">create</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">true</property> <mapping resource="cn/itcast/hibernate/domain/User.hbm.xml" />
<mapping resource="cn/itcast/hibernate/domain/Department.hbm.xml" />
<mapping resource="cn/itcast/hibernate/domain/Employee.hbm.xml" />
</session-factory>
</hibernate-configuration>
到了这里,全部的配置都已经配好了,就要開始測试了。
我们建立一个Many2One.java文件:
package cn.itcast.hibernate; import org.hibernate.Session;
import org.hibernate.Transaction; import cn.itcast.hibernate.domain.Department;
import cn.itcast.hibernate.domain.Employee; public class Many2One {
public static void main(String[] arg){
add();
Employee emp = query(1);
} static Department add(){
Session s = null;
Transaction tx = null;
try{
Department depart = new Department();
depart.setName("depart name"); Employee emp = new Employee();
emp.setDepart(depart); //建立两个对象的关联关系
emp.setName("emp name"); s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(emp); //emp对象和depart对象保存的先后顺序不同也会有一定的差异
s.save(depart); //假设员工(emp)先插入,部门(depart)后插入,会生成三条数据库语句,
//由于在两者都插入之后,emp的depart_id字段还未插入,所以还要有最后一条语句插入
tx.commit();
return depart;
}finally{
if(s!=null){
s.close();
}
}
} static Employee query(int empId){
Session s = null;
Transaction tx = null;
try{
s = HibernateUtil.getSession();
tx = s.beginTransaction();
Employee emp = (Employee)s.get(Employee.class, empId); //依据ID查询
System.out.println(emp.getName()); //查询员工姓名
System.out.println(emp.getDepart().getName()); //依据员工查询属于哪个部门
tx.commit();
return emp;
}finally{
if(s!=null){
s.close();
}
}
}
}
多对一的基本操作解说完成。
由此可见,Hibernate能够直接用面向对象的语言直接操作关系型数据库。
【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及加入、查询的更多相关文章
- eclipse中SSH三大框架环境搭建<三>
相关链接: eclipse中SSH三大框架环境搭建<一> eclipse中SSH三大框架环境搭建<二> 引言:通过上两篇文章我们已经可以掌握struts2和spring的环境的 ...
- SSH三大框架整合案例
SSH三大框架的整合 SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 ...
- SSH三大框架的整合
SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 1.4 Hibernate ...
- ssh三大框架的认识
一.SSH三大框架的概述 ssh为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层 ...
- eclipse中SSH三大框架环境搭建<二>
通过上一篇博客我们可以轻松搭建strtus2的环境,接下来由我来继续介绍spring的环境搭建以及spring注入的简单使用 相关链接:eclipse中SSH三大k框架环境搭建<一> ec ...
- eclipse中SSH三大框架环境搭建<一>
这里先简单介绍一下我用的三大框架版本以及下载地址 相关链接:eclipse中SSH三大框架环境搭建<二> eclipse中SSH三大框架环境搭建<三> struts-2.3.3 ...
- SSH三大框架合辑的搭建步骤
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- Maven SSH三大框架整合的加载流程
<Maven精品教程视频\day02视频\03ssh配置文件加载过程.avi;> 此课程中讲 SSH三大框架整合的加载流程,还可以,初步接触的朋友可以听一听. < \day02视频\ ...
- NHibernate 组件基础 (第六篇)
NHibernate 组件基础 (第六篇) 一.组件简介 组件(Component)可以理解为被一个对象所包含的对象而持久化,而并非一个实体.简单说来,假如数据库有FirstName,LastName ...
随机推荐
- 注意事项: Solr设备 Hello World
试用 Solr-4.10.2 一 shards, 这两款机器 一是垃圾 rm -r example/solr/collection1/data/* 启动一个 node cd example java ...
- Android - 支持不同的设备 - 支持不同的平台版本
在最新版本的Android为app提供很好的新API时,也应该继续支持旧版本的Android直到大部分设备已经更新了.这里将要介绍如何在使用最新API带来的优点的同时继续支持老版本. Dashboar ...
- 在Ceph创建虚拟机的过程改进分析
作为个人学习笔记分享.有不论什么问题欢迎交流! 近期在Gerrit中看到一个change:https://review.openstack.org/#/c/94295/ , 它主要是对当前在Ceph中 ...
- CodeCounter代码统计
今天一天写的,困死了 开发环境:VS2012 + WIN8-x64, MFC CSDN下载链接:http://download.csdn.net/detail/npu_wy/7405577 百度云下载 ...
- php阅读csv文件类
php处理csv文件类: http://www.php100.com/cover/php/540.html <?php define("CSV_Start", 0); def ...
- Nuget的使用
前言 最近看到园子上有关于NuGet (读音:new get)的使用,所以心血来潮也跟着学习做了一下,觉得很流b哦.于是也就记一下自己的学习心得(并非一味的重复轮子,只是觉得他人做的写的就是对的,自己 ...
- Android做法说明(3)---Fragment使用app袋或v4包解析
Android做法说明(3)---Fragment使用app袋或v4包解析 1)问题简述 相信非常多的朋友在调用Fragment都会遇到以下的情况: watermark/2/text/aHR0cDov ...
- MFC 盾webBrowser打开弹出的页面
void CansDlg::NewWindow3Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR b ...
- Hybrid app 发展历程
距离上一篇<基于微信 js-sdk 的简单应用>已经快一年了,说来真是惭愧.上次不久之后便换了工作,一直处于比较忙的状态.其次后面酣畅一段时间都没有从事移动相关的工作.直到今年3月份开始, ...
- 设计模式--简单工厂VS工厂VS抽象工厂
前几天我一直在准备大学毕业生,始终绑起来,如今,终于有时间去学习设计模式.我们研究今天的话题是植物三口之家的设计模式的控制--简单工厂VS工厂VS抽象工厂. 经过细心推敲,我们不难得出:工厂模式是简单 ...