hibernate和mybatis一对一和一对多配置

来源:互联网 发布:c语言数据类型举例 编辑:程序博客网 时间:2024/05/18 03:25

Mybaitis/hibernate学习笔记

1 Mybatis一对一,一对多配置

(1)一对一配置

1、resultMap配置

<!--配置一对一 -->
<resultMap id="studentmap"type="student">
    <idcolumn="sid"property="sid"[A1] ></id>
    <resultcolumn="studentname"property="studentname"></result>
    <association[A2] property="aClass"[A3] javaType[A4] ="class">
        <idcolumn="cid"property="cid"></id>
        <resultcolumn="classname"property="className"></result>
    </association>
</resultMap>

2、主表添加属性

private ClassaClass;

3、写sql语句

<select id="findStudent"resultMap="studentmap">
    select * FROM student,class WHERE student.cid=class.cid
</select>

(2)一对多配置

1、resultMap配置

<!--配置一多 -->
<resultMap id="classmap"type="class">
    <idcolumn="cid"property="cid"></id>
    <resultcolumn="className"property="className"></result>
    <collection[A5] property="students"ofType="student"[A6] >
        <idcolumn="sid"property="sid"></id>
        <resultcolumn="studentname"property="studentname"></result>
    </collection>
</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属性用于双向关联实体时,标注在不保存关系的实体中。

 

 


 [A1]colum:数据库字段;property:属性

 [A2]一对一关系配置从表为association

 [A3]主表中匹配关联表的那个属性

 [A4]一对一关系中 为javaType

配置 [A5]一对多关系为collection

 [A6]一对多要为ofType

原创粉丝点击