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()方法
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()方法
阅读全文
0 0
- hibernate个人总结2
- Spring个人总结2 -Spring集成Hibernate
- Hibernate个人总结
- 个人hibernate使用总结
- hibernate个人总结1
- Hibernate个人总结3
- hibernate个人总结之XML 配置文件
- Hibernate框架简介(个人总结及理解)
- 个人阶段总结2
- sql个人总结2
- 个人总结2
- linux个人总结2
- 个人总结2
- 个人总结2
- JDBC、Ibatis、Hibernate对比、以及优点缺点(个人总结)
- 排序算法个人总结(2)
- QuartZ 2D个人总结
- 排序算法个人总结(2)
- springMVC 中接收前端传递的对象、数组等数据的方式详解
- 透明控件点击事件穿透的解决办法
- git的commit/push/add
- 【数学建模】CUMCM-2016A 系泊系统的设计 解题思路整理
- Gdal库的简单使用及注意事项(C++版本和C#版本)
- hibernate个人总结2
- java开发_""和null的区别
- 九分靠谱的加载反馈框架LoadSir
- 【踩坑日记】git stash误删恢复
- 第3周项目4 顺序表应用
- 执行同步数据库命令 su -s /bin/sh -c "keystone-manage db-sync" keystone 失败
- node.js非安装配置
- 扩展python
- MySQL数据库引擎特性,和优化