Hibernate就是一个持久层的ORM的框架

(ORM :Object Relational Mapping.对象关系映射.框架是一个个JAVA类构成的体系结构,属于半成品);
Hibernate核心配置文件_级联删除
Hibernate的优点:
1.用来代替JDBC和DBUtils技术,操作数据库
2.将对关系型数据库操作转换为面向对象操作;

Hibernate映射文件
格式:类名.hbm.xml

Hibernate核心配置文件_级联删除_02
配置一对一:
比如说通知类DemandNotice 和提醒类 Calendars
发布一个通知,然后工作台出现提醒,所以保存提醒的时候,要保存上通知,所以只需在提醒类上
Hibernate核心配置文件_Hibernate配置_03
Hibernate核心配置文件_Hibernate配置_04
Hibernate核心配置文件_Hibernate配置_05

Hibernate核心配置文件_SSH框架之Hibernate配置 上_06
not-null=“false” :允许没有值的实体类为空;

两方的关系配置中都可以使用cascade属性配置级联操作:
save-update: 级联保存,保存一方时级联保存另一方数据.
delete:级联删除,删除一方时级联删除另一方数据.
all:级联删除+级联保存

结论:

*级联操作就是为了简化代码书写.
*级联操作使用的时候要慎重.尤其级联删除.


可以使用**inverse属性,**在一的一方决定是否需要维护关系:
true: 将关系维护反转给对方.我不会维护关系(外键).
false(默认值): 不反转给对方维护. 我会维护关系(外键).

结论:

  • 要不要放弃维护外键要看项目中的业务方向.例如CRM中,录入客户时,不需要指定联系人.录入联系人时需要指定联系人属于哪个客户. 业务上来说,就应该有联系人来维护与客户的关系. 客户不需要维护与联系人的关系. 可以在客户中配置inverse=true来放弃维护关系.(客户和联系人是一对多关系)
    Hibernate核心配置文件_hibernate_07
    Hibernate核心配置文件_Hibernate配置_08
  • 问题:如果两方都维护了关系.那么维护关系时,向中间表插入记录,会插入重复的记录.将会报错!!!
    解决方案1: 代码上由一方放弃
    解决方案2: 配置上使用inverse属性,让一方放弃关系维护

级联操作 :cascade

save-update:级联保存
delete:级联删除
all:2合一

结论: 级联操作用来简化操作.但是在多对多中极其危险.一定尽量避免在多对多中配置级联删除.其实不论从操作的危险程度还是业务逻辑角度来看.不存在多对多删除的问题.

Hibernate的核心配置文件

格式:hibernate.cfg.xml
Hibernate核心配置文件_hibernate_09

session-保存

public void fun2(){
	
	//1 创建Configuration
	Configuration conf = new Configuration();
	//2 调用方法读取主配置文件 .默认加载src下的hibernate.cfg.xml
	conf.configure();
	//3 根据配置信息获得SessionFactory工厂对象.由SessionFactory真正保存和使用配置信息
	//SessionFactory创建需要消耗很大内存资源.设计上来说,是线程安全的对象.
	SessionFactory sf = conf.buildSessionFactory();
	//4 获得session.
	Session session = sf.openSession();
	//5 获得操作事务对象
	Transaction tx = session.beginTransaction();
	//数据库操作
	//--------------------------------------------------
	Customer c = new Customer();
	c.setCust_name("jerry");
	session.save(c);
	//--------------------------------------------------
	//提交|回滚事务
	tx.commit();//提交
	//关闭资源
	session.close();
	sf.close();
} 

更多java、大数据学习面试资料,请扫码关注我的公众号:
Hibernate核心配置文件_Hibernate_10