1 Mybatis一对一,一对多配置
(1)一对一配置
1、resultMap配置
<!--配置一对一 --> |
2、主表添加属性
private ClassaClass; |
3、写sql语句
<select id="findStudent" resultMap="studentmap"> |
(2)一对多配置
1、resultMap配置
<!--配置一多 --> |
2 Hibernate一对一,一对多配置
(1)一对多配置
注释@OneToMany的定义代码如下:
@Target({METHOD, FIELD}) @Retention(RUNTIME)
public@interface OneToMany {
Class targetEntity() defaultvoid.class;
CascadeType[] cascade() default {};
FetchType fetch() default LAZY;
String mappedBy() default "";
}
1、targetEntity属性表示默认关联的实体类型。如果集合类中指定了具体类型了,不需要使用targetEntity.否则要指定targetEntity=AddressEO.class。
2、mappedBy属性用于标记当实体之间是双向时使用。
3、CascadeType[]:级联属性
CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的数据是实时的,在用实体中的数据之前就可以调用一下refresh()方法!
CascadeType.REMOVE:级联删除,当调用remove()方法删除Order实体时会先级联删除OrderItem的相关数据!
CascadeType.MERGE:级联更新,当调用了Merge()方法,如果Order中的数据改变了会相应的更新OrderItem中的数据,
CascadeType.ALL:包含以上所有级联属性。
4、FetchType加载方式
FetchType.LAZY:延迟加载
FetchType.EAGER:急加载
(2)一对一配置
@Target({METHOD,FIELD}) @Retention(RUNTIME)
public @interface OneToOne {
Class targetEntity() default void.class;
CascadeType[] cascade() default {};
FetchType fetch() default EAGER;
boolean optional() default true;
String mappedBy() default "";
}
1、targetEntity属性表示默认关联的实体类型,默认为当前标注的实体类;
2、cascade属性表示与此实体一对一关联的实体的联级样式类型。联级样式上当对实体进行操作时的策略。
说明:在定义关系时经常会涉及是否定义Cascade(级联处理)属性,担心造成负面影响.
·不定义,则对关系表不会产生任何影响
·CascadeType.PERSIST (级联新建)
·CascadeType.REMOVE (级联删除)
·CascadeType.REFRESH (级联刷新)
·CascadeType.MERGE (级联更新)中选择一个或多个。
·还有一个选择是使用CascadeType.ALL ,表示选择全部四项
3、fetch属性是该实体的加载方式,有两种:LAZY和EAGER。
4、optional属性表示关联的实体是否能够存在null值。默认为true,表示可以存在null值。如果为false,则要同时配合使用@JoinColumn标记。
5、mappedBy属性用于双向关联实体时,标注在不保存关系的实体中。