hibernate个人总结2

来源:互联网 发布:陈国良院士 知乎 编辑:程序博客网 时间:2024/06/05 15:40
Session(一级缓存) =session +cache
save,update,savaOrUpdate,load都会缓存数据

hibernate中对象的状态
1.临时状态或者瞬时状态:
对象刚刚创建,还没有进行持久化,就是没有进行保存,对象在内存中
瞬时状态的对象,内存中存在,数据库中不存在,session中不存在
2.当把临时状态的对象保存到数据库中,此时变成持久化状态
内存中存在,session存在,数据库中存在
3.游离状态:
对象在数据库中存在,在session缓存中不存在

对象之间的关系
1、一对一
     a、单向
 外键:(掌握)
<class name="Husband" table="TBL_Husband">
<id name="hid" column="HUS_ID">
   <generator class="uuid"/>
</id>
<property name="hname" type="string" column="HNAME"/>
<many-to-one name="wife" unique="true" column="WIFE_ID" class="Wife"></many-to-one>
</class>
 主键:(了解)
<class name="Husband" table="TBL_Husband">
   <id name="hid" column="HUS_ID">
      <generator class="foreign">
 <param name="property">wife</param>
      </generator>
   </id>
   <property name="hname" type="string" column="HNAME"/>
   <one-to-one name="wife" constrained="true" class="Wife" />
       </class>
---constrained:创建外键关系

     b、双向
  主键:(了解)
<class name="Husband" table="TBL_Husband">
<id name="hid" column="HUS_ID">
   <generator class="foreign">
<param name="property">wife</param>
   </generator>
</id>
<property name="hname" type="string" column="HNAME"/>
<one-to-one name="wife" constrained="true" class="Wife" />
   </class>

   <class name="Wife" table="TBL_Wife">
<id name="wid" column="WIFE_ID">
   <generator class="uuid"/>
</id>
<property name="wname" type="string" column="WNAME"/>
<one-to-one name="husband" property-ref="wife"></one-to-one>
   </class>

   property-ref:关系交给对方维护
  外键:
<class name="Husband" table="TBL_Husband">
<id name="hid" column="HUS_ID">
   <generator class="uuid" />
</id>
<property name="hname" type="string" column="HNAME"/>
<many-to-one name="wife" class="Wife" unique="true" column="wife_id"></many-to-one>
</class>

<class name="Wife" table="TBL_Wife">
<id name="wid" column="WIFE_ID">
<generator class="uuid"/>
</id>
<property name="wname" type="string" column="WNAME"/>
<one-to-one name="husband" property-ref="wife"></one-to-one>
      </class>


  2、一对多
     a、单向
<class name="Dept" table="TBL_Dept">
<id name="did" column="DEPT_ID">
   <generator class="uuid" />
</id>
<property name="dname" type="string" column="DNAME"/>
<set name="emps">
<key column="DEPT_ID"></key>
<one-to-many class="Emp"/>
</set>
 </class>

 <class name="Emp" table="TBL_EMP">
<id name="empid" column="EMP_ID">
<generator class="uuid"/>
</id>
<property name="ename" type="string" column="ENAME"/>
 </class>
     b、双向
<class name="Dept" table="TBL_Dept">
           <id name="did" column="DEPT_ID">
               <generator class="uuid" />
           </id>
           <property name="dname" type="string" column="DNAME"/>
           <set name="emps">
        <key column="DEPT_ID"></key>
        <one-to-many class="Emp"/>
           </set>
       </class>

<class name="Emp" table="TBL_EMP">
           <id name="empid" column="EMP_ID">
               <generator class="uuid"/>
           </id>
           <property name="ename" type="string" column="ENAME"/>
           <many-to-one name="dept" column="DEPT_ID"></many-to-one>
      </class>
  3、多对一
     a、单向
<class name="Dept" table="TBL_Dept">
           <id name="did" column="DEPT_ID">
              <generator class="uuid" />
           </id>
           <property name="dname" type="string" column="DNAME"/>
       </class>

<class name="Emp" table="TBL_EMP">
           <id name="empid" column="EMP_ID">
              <generator class="uuid"/>
           </id>
           <property name="ename" type="string" column="ENAME"/>
           <many-to-one name="dept" column="DEPT_ID"></many-to-one>
      </class>


  4、多对多
     a、单向
<class name="Course" table="TBL_COURSE">
       <id name="cid" column="C_ID">
           <generator class="uuid" />
       </id>
       <property name="cname" type="string" column="CNAME"/>
</class>

<class name="Student" table="TBL_STUDENT">
       <id name="stuid" column="STU_ID">
           <generator class="uuid" />
       </id>
       <property name="sname" type="string" column="SNAME"/>
      <set name="courses" table="SC">
      <key column="STU_ID"></key>
      <many-to-many class="Course" column="C_ID"></many-to-many>
      </set>
</class>
     b、双向
<class name="Student" table="TBL_STUDENT">
       <id name="stuid" column="STU_ID">
           <generator class="uuid" />
       </id>
       <property name="sname" type="string" column="SNAME"/>
      <set name="courses" table="SC">
      <key column="STU_ID"></key>
      <many-to-many class="Course" column="C_ID"></many-to-many>
      </set>
</class>

<class name="Course" table="TBL_COURSE">
       <id name="cid" column="C_ID">
           <generator class="uuid" />
       </id>
       <property name="cname" type="string" column="CNAME"/>
       <set name="students" table="SC">
      <key column="C_ID"></key>
      <many-to-many class="Student" column="STU_ID"></many-to-many>
      </set>
</class>


注解的配置
@Entity  -->此注解在表示此类映射到数据库
@table   -->映射到数据库的表名 使用name属性定义
@Id -->代表此属性标识ID,使用在get方法上
@GeneratedValue(sttrategy=GenerationType.AUTO)
@Column  -->代表此属性,映射到数据的列

1、一对一的关系(丈夫和妻子)
   a、单向
@OneToOne     -->表示一对一的关系
@JoinColumn(name="HUSBAND_ID")   -->设置外键的列名
   b、双向
      @OneToOne(mappedBy="") -->mappedBy:通过此属性,把关系交给对方维护 
       
    2、多对一 or 一对多
        @ManyToOne  -->表示多对一的关系


      双向:@OneToMany(mappedBy="dept")  -->关系交给对方维护
    
    3、多对多
@ManyToMany  -->代表多对多
@ManyToMany(mappedBy="")  -->关系交给对方维护
@JoinTable(name="S_C",joinColumns=@JoinColumn(name="C_ID"),inverseJoinColumns=@JoinColumn(name="S_ID"))


        注意:
   一般出现多对多的情况时,我们的处理的方式,会多对多分解成两个一对多进行处理




一级缓存 :
缓存,就是内存中开辟的一个空间,保存数据, 当我们去操作数据库时,先去缓存中查找,如果找到数据,直接返回
不用操作数据库,如果缓存找不到,再去查询数据库,查询出来之后,现在缓存中保存,共下次使用

hibernate中的一级缓存:session:
    session级别的缓存,由hibernate自动管理,
    session = connection + 一级缓存
    
    session缓存什么时候开启?
    当session对象创建的时候。调用openSession()方法时,缓存暂时开启
          什么时候销毁session缓存?
        当调用close()方法时,缓存销毁,调用clear()方法时,清除缓存
    
    一级缓存是hibernate默认使用的,无序配置即可使用
    一级缓存是Session级的缓存,不能跨多个session对象来使用;
  Session的load/get方法支持一级缓存的读和写
     如需要存大量的CUD操作,应及时刷新和清空一级缓存,可用session的clear()方法
原创粉丝点击