“低耦合”给软件项目带来的优点是:易于变更、易于重用。
“高内聚”给软件项目带来的优点是:可读性强、易维护和变更、支持低耦合、移植和重用性强。
强内聚和弱耦合是相辅相成的,一个良好的设计是由若干个强内聚模块以弱耦合的方式组装起来的
必须配置:
有几个实体类就要,有几个映射文件,就要有几个mapping
可选配置:
<property name="hibernate.show_sql">true</property><!-- sql语句输出到控制台 -->
<property name="hibernate.hbm2ddl.auto">update</property><!-- 如果没有表自动建立表。如果没有类创建类 -->
项目目录结构说明:
Hibernate配置文件最好放在src目录下
Hibernate API操作流程
- 加载Hibernate核心配置文件,创建Configuration对象;
Configuration cfg=new Configuration().configure(). - 创建SessionFactory对象,该对象创建耗费资源,创建一次即可;
SessionFactory factory=cfg.buildSessionFactory(); - 创建Session对象;
Session session=factory.openSessin(); - 开启事务;
Transaction tran=session.beginTransaction(); - 执行增删改查操作;
save()、update()、delete()、get()/load() - 提交事务
tran.commit(); - 关闭事务/关闭session/关闭sessionFactory
close();
增删改之后要提交事务:
Transaction tran = null;
tran.commit();
Java程序中区分不同对象。
Java语言中通过内存地址区分不同对象;
两种比较引用变量方法;
1."==" 比较两个变量引用的内存地址是否相同;
2.equals 比较两个变量引用的对象的值是否相同。
用户自定义的类也可以覆盖Object的equals方法实现对象按值进行比较。
映射文件中OID的配置
<generator>
子元素用来指定OID的生成器
标识符生成器
Hibernate 自带了很多种标识符生成器:
increment 采用 Hibernate 数值递增的方式;
identity 采用数据库提供的自增长方式;
assigned 主键由应用逻辑产生;
sequence 采用数据库提供的序列方式;
hilo 通过hi/lo算法 // Hibernate 5.0 以后不支持;
seqhilo 通过hi/lo算法;
native 自动选择合适的标识符生成器;
uuid.hex 通过uuid算法。
increment标识符适用范围
increment 标识符:该机制是 Hibernate 以递增的方式为OID赋值。
不依赖于底层数据库系统,适合所有数据库;
适合单独的 Hibernate 应用使用,不适合在集群情况下使用。
identity标识符适用范围
identity 标识符:该机制依赖于底层数据库,需要数据库支持自动增长字段。(底层数据库不管删没删除,如删除id=7 ,如果重新添加一个字段这时id=8)
例如:MySQL、MSSQL、DB2、Sybase等。
assigned 标识符适用范围
assigned 标识符:该机制是由外部程序负责生成 OID, Hibernate 不负责维护主键生成,与Hibernate和底层数据库都无关。(简单的理解为:要手动设置id)
例如: Student 类没有定义 ID,而是以学号 studentNo 作为业务主键