对象关系映射

Hibernate中的映射关系(一对多)

☆樱花仙子☆ 提交于 2020-03-23 12:58:22
在数据库中表和表之间的关系有几种,(一对一,一对多,多对多) 一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique='true']) 一对多关系:在多的一端插入一端的主键为外键(one-to-many<--->many-to-one) 多对多关系:新建一个表,选择两个表的主键为表的两个外键(many-to-many<-->many-to-many>) 关系配置步骤:   ①:分析1端和n端   ②:在1端插入n端的集合属性   ③:在n端插入一端的对象属性   ④:注明关系在那一段维护   基于xml文件格式配置 I单向一对一(以department和manager为例)   配置步骤:   ①:分析1端和n端(如果是一对一关系的时候,可以选择任意一方为N端,这里指定department为n端)   ②:在1端插入n端的集合属性(因为是一对一,所以不可以使集合对象属性,只能使用对象属性->private Department department)   ③:在n端插入一端的对象属性->private Manager manager   ④:注明关系在那一段维护:一般选择N端来维护关系 《使用many-to-one[unique='true']》   步骤:1在一对一关联的持久化类中互相添加对方对象属性,   

Hibernate关系映射之many-to-many

梦想与她 提交于 2020-03-23 12:55:18
1、建表 2、创建实体类及映射文件 Student.java类 1 public class Student implements java.io.Serializable { 2 3 // Fields 4 5 private Integer sid; 6 private String sname; 7 private Set<Teacher> teachers=new HashSet<Teacher>(); 8 9 // Constructors 10 11 /** default constructor */ 12 public Student() { 13 } 14 15 /** full constructor */ 16 public Student(String sname) { 17 this.sname = sname; 18 } 19 20 // Property accessors 21 22 public Integer getSid() { 23 return this.sid; 24 } 25 26 public void setSid(Integer sid) { 27 this.sid = sid; 28 } 29 30 public String getSname() { 31 return this.sname; 32 } 33 34

映射一对一关联

天大地大妈咪最大 提交于 2020-03-23 12:54:50
Hibernate提供了两种一对一关联关系的方式,按照外键映射和按照主键映射. 一对一关系映射即为关系双方都含有对方一个引用其实在生活中一 对一关系也很常见比如人和身份证学生和学号等都是一对一的关 系映射一对一映射分为单向的和双向的没种关系映射又可以分为主 键关联映射,唯一外键关联映射。 保存员工档案的同时分配给员工一个账号.. 在映射持久化对象中的属性时,需要注意一些问题 Resume1.hbm.xml <many-to-many   name="users1"   class="cn.happy.entity.Users1"   column="resuserid"   cascade="all" //为了   unique="true" //表明每一个resume1对象和User1对象之间一对一的关联关系 /> Users1.hbm.xml <one-to-one name="resume1"   class="cn.happy.entity.User"   property-ref="users1" //表明Resume1的user1属性建立了从User1对象到Resume1对象的关联 /> Test代码 package cn.happy.test; import org.hibernate.Session; import org.hibernate

Hibernate组件映射

北慕城南 提交于 2020-03-23 12:54:18
组件的映射 建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表中的数目及表之间的外键参照关系。以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息单独放在一张表中,然后建立员工信息表和地址信息表之间的外键关系,当每次查询员工信息时,都需要建立这两个表的连接。建立表的连接是很耗时的操作,为了提高数据库运行性能,可以把这两张表的信息整合在一张员工信息表Empinfo中 提示: HibernateUtil工具类(用于获取session和关闭session) package cn.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { //初始化一个ThreadLocal对象,有get和set方法 private static final ThreadLocal<Session> sessionTL=new ThreadLocal<Session>(); private static Configuration configuration; private final static SessionFactory

06章 映射一对多双向关联关系、以及cascade、inverse属性

半世苍凉 提交于 2020-03-23 12:53:48
当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象。或者通过集合导航到一组对象。例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp.getDept(); //从Emp对象导航到关联的Dept对象 以Dept(部门)类和Emp(员工)类为例: 一、配置双向一对多关联 需在Dept类中增加一个集合类型的emps属性 private Set<Emp> emps=new HashSet<Emp>(); public Set<Emp> getEmps() { return emps; } public void setEmps(Set<Emp> emps) { this.emps = emps; 如何在映射文件中映射集合类型的emps属性。由于在Dept表中没有直接与emps属性对应的字段。因此不能用<property>元素来映射emps属性,而要使用<set>元素: <set name="emps"> <key column="deptNo"></key> <!-- 多的一方 emp外键 --> <one-to-many class="Emp" /> </set> 解析: <set>元素的name属性:设定持久化类的属性名。此处为Dept类的emps属性。 <set>元素还包含两个子元素: ①<key>元素

hibernate的映射关系之一对多

╄→尐↘猪︶ㄣ 提交于 2020-03-23 12:52:27
关系 :事物之间相互作用、相互联系的状态。范围最大。 联系 :在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n。 关联 :表示对象之间的关系,既有数量性,又有方向性;动词:将对象之间通过某种方式联系起来。 映射 :这里指java对象和数据库表的一种对应关系。动词:形成这种对应关系。 级联 :有关系的双方中操作一方,另一方也将采取一些动作。 关联的联系种类 在不考虑关联的方向前提下,联系就是关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n。 一对一联系(1:1):如用户和身份证、一夫一妻 一对多联系(1:n):如班级和学生 多对多联系(m:n):如学生和选课 关联的方向 关联关系的方向可分为单向关联和双向关联。 双向关联的方向其实就不重要了,因为通过任一一方都可以维护彼此的关系。也就是说:在双向关联中一对多和多对一都是一样的。 利用Java Project项目演示试用Hibernate技术添加数据到数据库 1 建立项目之后首先呢肯定是需要导入相关的JAR包的 2 然后是创建实体类 package cn.itcast.hiberate.sh.domain; public class Student { private Long sid; private String sname; private String description; public Long

浅析Hibernate映射(二)——关系映射(2)

微笑、不失礼 提交于 2020-03-23 11:31:47
单向一对一关联映射 有两种方式实现一对一关联映射: 1、主键关联:让两个实体的主键一样,即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有多余的字段来维护它们之间的关系,仅通过表的主键来关联。 映射后的关系模型: 映射文件: User.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="com.jialin.hibernate"> <class name="Person"> <id name="id"> <!--采用foreign策略,可以取得关联对象的主键 --> <generator class="foreign"> <!--property代表要关联的对象 --> <param name="property">card</param> </generator> </id> <property name="name" /> <!-- constrained用来区别是否如何加载其关联对象, 1、默认为false

hibernate 一对多双向关联 详解

£可爱£侵袭症+ 提交于 2020-03-23 11:20:36
一、解析: 1、 一对多双向关联也就是说,在加载班级时,能够知道这个班级所有的学生。 同时,在加载学生时,也能够知道这个学生所在的班级。 2、我们知道,一对多关联映射和多对一关联映射是一样的,都是在多的一端加外键了。 只不过是角度不同,我们从Classes一端来看,它就是一对多,它维护了一个一指向多的关系。在加载班级时,能够把学生加载上来。返过来,多个学生是属于一个班级的,它就是多对一。 3、而像我们的用户和组,就是多对一。多对一维护了一种知道,就是多指向一,所以在加载学生时,就能拿到这个学生所在的班级。如果能够拿到它所在的班级,那么必须在对象模型Student中,持有Classes对象的一个引用。 所以要在Student实体模型中,加入一个字段classes。这样才能实现双向的一对多的关联映射。 二、新建hibernate_one2many_2项目 三、修改对象模型 : 1、在Student.class中加上classes字段。 package com.bjsxt.hibernate; public class Student { private int id; private String name; Classesclasses; public Classes getClasses() { return classes; } public void setClasses

Mybatis 框架学习

邮差的信 提交于 2020-03-23 05:45:35
Mybatis 一. 入门 1. JDBC 回顾 (1). 准备数据库 新建 mybatis_learn 数据库 执行 sql 脚本 1 -- ---------------------------- 2 -- Table structure for `Blog` 3 -- ---------------------------- 4 DROP TABLE IF EXISTS `Blog`; 5 CREATE TABLE `Blog` ( 6 `id` int(11) NOT NULL AUTO_INCREMENT, 7 `author` varchar(128) NOT NULL COMMENT '作者', 8 `title` varchar(128) NOT NULL COMMENT '博客标题', 9 PRIMARY KEY (`id`) 10 ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 11 ​ 12 -- ---------------------------- 13 -- Records of Blog 14 -- ---------------------------- 15 INSERT INTO `Blog` VALUES ('1', '张三', 'Java基础概述'); 16 INSERT

Hibernate学习之映射关系

 ̄綄美尐妖づ 提交于 2020-03-23 05:31:05
一、Hibernate多对一关联映射:就是在“多”的一端加外键,指向“一”的一端。   比如多个学生对应一个班级,多个用户对应一个级别等等,都是多对一关系。      1、“多”端实体加入引用“一”端实体的变量及getter,setter方法。   比如说多个学生对应一个班级,在学生实体类加入:private Grade grade;   2、“多”端配置文件,student.hbm.xml里的标签设置:<many-to-one name="grade" column="gradeId" ></many-to-one> 二、Hibernate单向的一对一主键关联映射:就是让两个实体的主键一样,就不需要加入多余的字段了。   比如一个学生对应一个身份证号,一个学生对应一条户口信息等等,都是一对一关联映射。      1、Person实体里要持有IdCard的引用。在Person实体里加入属性:Private IdCard idCard;   2、Person端维护关系,所以需要重点看Person的配置文件,Person.hbm.xml通俗来讲 ,就是就是Person中的Id既为主键又为外键。   所以需要修改Person中的id标签:通俗来讲是告诉Person里的id去关联哪个实体里的id。 此处的 foreign生成策略,会取得关联对象的标识, property标签内是关联 此处的