Hibernate就是一个持久层的ORM的框架
(ORM :Object Relational Mapping.对象关系映射.框架是一个个JAVA类构成的体系结构,属于半成品);
Hibernate的优点:
1.用来代替JDBC和DBUtils技术,操作数据库
2.将对关系型数据库操作转换为面向对象操作;
Hibernate映射文件
格式:类名.hbm.xml
配置一对一:
比如说通知类DemandNotice 和提醒类 Calendars
发布一个通知,然后工作台出现提醒,所以保存提醒的时候,要保存上通知,所以只需在提醒类上
not-null=“false” :允许没有值的实体类为空;
两方的关系配置中都可以使用cascade属性配置级联操作:
save-update: 级联保存,保存一方时级联保存另一方数据.
delete:级联删除,删除一方时级联删除另一方数据.
all:级联删除+级联保存
结论:
*级联操作就是为了简化代码书写.
*级联操作使用的时候要慎重.尤其级联删除.
可以使用**inverse属性,**在一的一方决定是否需要维护关系:
true: 将关系维护反转给对方.我不会维护关系(外键).
false(默认值): 不反转给对方维护. 我会维护关系(外键).
结论:
- 要不要放弃维护外键要看项目中的业务方向.例如CRM中,录入客户时,不需要指定联系人.录入联系人时需要指定联系人属于哪个客户. 业务上来说,就应该有联系人来维护与客户的关系. 客户不需要维护与联系人的关系. 可以在客户中配置inverse=true来放弃维护关系.(客户和联系人是一对多关系)
- 问题:如果两方都维护了关系.那么维护关系时,向中间表插入记录,会插入重复的记录.将会报错!!!
解决方案1: 代码上由一方放弃
解决方案2: 配置上使用inverse属性,让一方放弃关系维护
级联操作 :cascade
save-update:级联保存
delete:级联删除
all:2合一
结论: 级联操作用来简化操作.但是在多对多中极其危险.一定尽量避免在多对多中配置级联删除.其实不论从操作的危险程度还是业务逻辑角度来看.不存在多对多删除的问题.
Hibernate的核心配置文件
格式:hibernate.cfg.xml
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、大数据学习面试资料,请扫码关注我的公众号: