21_22_一对多关联映射_单向_1、2
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
p.MsoHeader, li.MsoHeader, div.MsoHeader
{margin:0cm;
margin-bottom:.0001pt;
text-align:center;
mso-pagination:none;
tab-stops:center 207.65pt right 415.3pt;
layout-grid-mode:char;
border:none;
mso-border-bottom-alt:solid windowtext .75pt;
padding:0cm;
mso-padding-alt:0cm 0cm 1.0pt 0cm;
font-size:9.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
p.MsoFooter, li.MsoFooter, div.MsoFooter
{margin:0cm;
margin-bottom:.0001pt;
mso-pagination:none;
tab-stops:center 207.65pt right 415.3pt;
layout-grid-mode:char;
font-size:9.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;
mso-footnote-separator:url("21_22_一对多关联映射_单向_1、2.files/header.htm") fs;
mso-footnote-continuation-separator:url("21_22_一对多关联映射_单向_1、2.files/header.htm") fcs;
mso-endnote-separator:url("21_22_一对多关联映射_单向_1、2.files/header.htm") es;
mso-endnote-continuation-separator:url("21_22_一对多关联映射_单向_1、2.files/header.htm") ecs;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
21_22_
一对多关联映射
_
单向
_1
、
2
例子:
Student.java
、
Classes.java
、
Student.hbm.xml
、
Classes.hbm.xml
、
ExportDB.java
、
HibernateUtils.java
、
one2many.java
|
hihernate
一对多关联映射(单向
Classes----->Student
)
t_student
1
|
10
|
1
2
|
祖儿
|
1
|
一对多关联映射利用了多对一关联映射原理
多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一
一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多
也就是说一对多和多对一的映射策略是一样的,只是站的角度不同
在一一端维护关系的缺点:
*
如果将
t_student
表里的
classesid
字段设置为非空,则无法保存
*
因为不是在
student
这一端维护关系,所以
student
不知道是哪个班的,
所以需要发出多余的
update
语句来更新关系
一对多和多对一关系,这两个没多少区别,都是在
多
的这边加上外键指向
一
的这边,
主要的区别是:
如果维护的是多对一,当加载多
(
多个学生
)
的时候,它能把一
(
多个学生对应的那个一个班级
)
加载进来
;
如果维护的是一对多,当加载一
(
一个班级
)
的时候,它能把多
(
一个班级里含有的多个学生
)
加载进来
;
例子:
Student.java
代码
package
com.bjsxt.hibernate;
public
class
Student {
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;
}
}
|
Classes.java
代码
package
com.bjsxt.hibernate;
import
java.util.Set;
public
class
Classes {
private
int
id
;
private
String
name
;
private
Set
studentes
;
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
Set getStudentes() {
return
studentes
;
}
public
void
setStudentes(Set studentes) {
this
.
studentes
= studentes;
}
}
|
Student.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
>
<
class
name
=
"com.bjsxt.hibernate.Student"
table
=
"t_Student"
>
<
id
name
=
"id"
>
<
generator
class
=
"native"
/>
</
id
>
<
property
name
=
"name"
/>
</
class
>
</
hibernate-mapping
>
|
Classes.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
>
<
class
name
=
"com.bjsxt.hibernate.Classes"
table
=
"t_Classes"
>
<
id
name
=
"id"
>
<
generator
class
=
"native"
/>
</
id
>
<
property
name
=
"name"
/>
<!--
在
Student
实体里没有
classesid
字段,所以在这里加上个外键
classesid,
作为外键指向
Student
,
-->
<
set
name
=
"studentes"
>
<
key
column
=
"classesid"
/>
<
one-to-many
class
=
"com.bjsxt.hibernate.Student"
/>
</
set
>
</
class
>
</
hibernate-mapping
>
|
HibernateUtils.java
代码
package
com.bjsxt.hibernate;
import
org.hibernate.Session;
import
org.hibernate.SessionFactory;
import
org.hibernate.cfg.Configuration;
public
class
HibernateUtils {
private
static
SessionFactory
factory
;
static
{
try
{
Configuration cfg =
new
Configuration().configure();
factory
= cfg.buildSessionFactory();
}
catch
(Exception
e) {
e.printStackTrace();
}
}
public
static
SessionFactory getSessionFactory() {
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
1. **、、<map> 和 **:这些元素是Hibernate用于映射不同类型的集合的标签。`<set>`用于映射无序且不重复的集合,如Java的HashSet;`<list>`用于映射有序的集合,如ArrayList,元素可以通过索引访问;`<map>`则用于...
`AbstractTag.java`可能是另一个抽象基类,它可能不涉及具体的属性映射,而是提供了一些通用的标签处理逻辑,比如初始化和清理资源等。 在自定义标签的实际实现中,我们可以继承`AbstractMapTag`,然后在`...
通过深入理解并实践`chapter10_oneToOne`、`chapter10_oneToMany`和`chapter10_ManyToMany`中的例子,你将能够熟练地在项目中应用这些映射技术,提高代码的可读性和可维护性。记得仔细研究每个示例,掌握它们的配置...
本资料主要探讨的是MyBatis中的两个关键标签:`select`和`resultMap`,这两个标签在映射文件中起着至关重要的作用。 `select`标签是MyBatis用于执行SQL查询的标签,它允许我们将SQL语句嵌入到XML配置文件中。`...
**SpringMVC_2_HelloWorld**(共19页):这部分内容通过简单的HelloWorld示例介绍了SpringMVC的基本工作流程,包括控制器(Controller)的创建、视图解析器(ViewResolver)的配置、请求映射(@RequestMapping)等...
在罗克韦尔AB PLC RSLogix5000编程环境中,标签是极其重要的组成部分,它们作为数据存储和传输的媒介,使得程序的编写更加高效和可读。本篇文章将详细解析如何在RSLogix5000中创建标签以及如何使用标签进行编程。 ...
2. **SQL语句映射**:在映射文件中,可以通过`<select>`、`<insert>`、`<update>`和`<delete>`等标签来定义具体的SQL操作。这些标签内部包含了执行的SQL语句以及一些相关的属性,如参数类型、返回类型等。 3. **...
同样有外键关联和主键关联两种方式,其基本原理与一对一关系类似,只是`<collection>`标签通常用于处理集合类型的属性。 ### 多对多关系映射 多对多关系如学生和课程的对应关系,需要通过一个中间表来建立联系。在...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便更好地管理和操作数据。这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行...
20. **列属性标签**:`<col>` 和 `<colgroup>` 用于定义表格列的样式和属性。 21. **定义列表标签**:`<dd>` 和 `<dt>` 分别表示定义列表中的描述和术语。 22. **删除文本标签**:`<del>` 用于标记被删除的文本,...
映射模板(HBM文件)的基本结构通常包含以下元素: 1. `<hibernate-mapping>`:根元素,声明这是个Hibernate映射文件。 2. `<class>`:表示一个Java实体类,它对应于数据库中的一个表。需要指定类名(`name`属性)...
它可以自定义字段和属性之间的映射关系,支持一对多和多对一等复杂的数据结构映射。 **示例:** 查询全部订单数据的需求,可以通过以下步骤实现: 1. 创建订单POJO类`Order`。 2. 创建订单Mapper接口`OrderMapper`...
一、一对多映射的基本概念 在数据库中,如果一个表的记录(主表)与另一个表的记录(从表)之间存在多个对应关系,就形成了一对多的关系。在MyBatis中,我们可以通过配置XML映射文件或者注解来实现这种映射,以便在...
`<class>`标签定义了映射的Java类,`<id>`标签用于标识主键,`<property>`标签则对应于Java类的属性和数据库表的列。你需要根据实体类的实际情况,手动修改或添加这些元素,以确保映射的准确性。 除了手动编辑,...
其中,`namespace`属性是映射器接口的全限定类名,用于关联映射器接口和XML文件。 2. **增删改查操作** - **Insert**:插入数据,使用`<insert>`标签定义SQL语句,并通过`id`属性指定唯一的操作标识。 - **...
1. 当数据库表的一列数据需要在Java对象中表示为数组时,例如存储一组标签或分类。 2. 对于有序的数据集合,数组可以保持其顺序,而List在某些情况下可能会丢失顺序。 3. 当你需要高效地访问和修改数据,且数据量...
这里的`<class>`标签表示映射到特定的Java类,其属性`name`指定了对应的Java类全名,而`table`和`schema`分别指定了数据库表名和模式名。 #### 设置默认值的方法 要设置字段的默认值,可以利用`<property>`标签内...
8. **`body`标签属性**:`<body>`标签包含页面的主要内容,其属性包括`bgcolor`(背景颜色),`background`(背景图像),`bgproperties`(背景图像固定与否),`text`(页面文字颜色),`link`(未激活链接颜色),...
总之,"Struts1.2基本标签使用视频"是一份对初学者和有一定经验的开发者都非常有帮助的学习资源。它将帮助你更好地理解和掌握Struts1.2框架中的核心标签,提高你在Java Web开发中的技能。通过深入学习和实践,你将...
在`User`类的映射文件中,我们可以定义一个`resultMap`,它包含了`User`的基本属性以及一个嵌套的`orderList`,表示用户的所有订单: ```xml <id property="id" column="user_id" /> <!-- 其他User属性映射 --> ...