**分层体系结构:**指的是将系统的组件分隔到不同的层中,每一层的组件应保持内聚性,并且应大致在同一抽象级别;每一层都英语它下面的各层保持松散耦合(高内聚和低耦合是相辅相成的,一个良好的设计是由若干个高内聚模块以低耦合的方式组装起来的)(低耦合:易于更变、易于重用)(高内聚:可读性强、以维护和变更、支持低耦合、一致和重用性强)
层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件的API,而下层组件不应该依赖上层组件;
每个层对上层公开API,但具体的实现细节对外透明。
未来把数据访问细节和业务逻辑分开,可以把数据访问作为单独的持久化层。
瞬时状态:保存在内存的程序数据,程序退出后,数据就消失了;
持久状态:保存在数据库(磁盘)的程序数据,程序退出后,数据依然存在,称为程序数据的持久状态
持久化:将程序数据在瞬时状态和持久化状态之间转换的机制(狭义:把内存中的对象存储到关系型数据库)(广义:包括和数据库相关的各种操作,保存、更新、删除、加载、查询)()
为了把数据访问细节和业务逻辑分开,可以把数据访问作为单独的持久化层(持久化层封装了数据访问细节,为业务逻辑层提供面向对象的API,使业务逻辑层可以专注于实现业务逻辑);
业务逻辑层不仅要负责业务逻辑,还要直接访问数据库,提供对业务数据的保存、更新、删除和查询操作。为了把数据访问细节和业务逻辑分开,可以把数据访问作为单独的持久化层
MVC模式中,View视图&Controller控制器相当于表述层;Model模型相当于业务逻辑层+持久化层+数据库层
ORM:对象—关系映射,是随着面向对象的软件开发方法发展而产生的。用来把域模型表示的对象映射到关系数据模型对应的数据库结构中去。(好处:通过ORM思想在操作实体对象的时候,就不需要再去和复杂的SQL语句打交道,只需要简单的操作实体对象的属性和方法,ORM技术是在实体类对象和数据库表之间提供了一条桥梁,对象型数据和数据中的关系通过这个桥来互相转化)
Hibernate
1)在分层体系结构中hibernate位于持久层,是完成对象持久化的持久层框架
2)Hibernate是连接Java应用程序和关系型数据库的框架,能够建立对象模型和关系数据模型之间的映射,是一种自动的OMR框架,是Java程序员可以方便的运行面向对象的变成思想来操纵关系型数据库
3)Hibernate是对JDBC API的封装,是JDBC轻量级封装框架,增强了代码的重要性,简化了代码,提高编程效率,必要时Java程序员可以绕过Hibernate直接访问JDBC API
4)HIbernate不仅可以应用在独立的Java程序中,还可以应用在Java Web项目中,可以和多种Web服务集成,并支持多种数据库平台
Hibernate创建步骤
在eclipse中先创建一个新的项目,导入hibernate及Jar包,引入MySQL数据库驱动包
*编写hibernate配置文件
*创建Java持久化类xxx.java
*编写持久化类的映射配置文件xxx.hbm.xml
*使用hibernate API完成对象的持久化
Hibernate配置文件两种方式:
1)hibernate.properties(键=值)
2)hibernate.cfg.xml
元素用于指定类和表之间的映射,包含一个
#name属性设定类型
#table属性设定表名,默认以类名做表名
子元素设定持久化类的OID和表的主键的映射关系
#column指定表字段的名称
#generator元素指定OID的生成器
及多个子元素
#name对应类的属性名称
#type指定属性的名称
#column指定表字段的名称
#not-null指定属性是否允许为空
实体关系一对一(1:1)
Hibernate提供两种映射一对一关联关系的方式:
主键关联映射在主键表中
#通过元素配置
cascade属性(级联属性为all)
#User.hbm.xml
主键关联映射在外键表中
#通过元素配置
constrained属性为true,表明PERSON表ID为外键,参照主表(USER)
外键表实体类配置文件中OID使用foreign生成策略
#Person.hbm.xml
唯一外键关联映射(外键必须设定unique约束)
在外键表,通过元素配置
column属性指明外键列
unique属性设置为true,表明唯一约束
cascade属性设置为all,表明删除USER时同时删除PERSON
在主键表,通过元素配置
property-ref属性,表明建立了User到Person的一对一关联关系
实体关系一对多(1:n)
单向一对多:在User中定义一个Order的引用集合,而在Order中无需任何定义
在User.hbm.xml文件中使用元素配置
#name属性:指定要映射的属性名
#cascade级联操作属性:save-update、delete、all、none
的子元素:
1)元素:column属性设定所关联类对应表的外键
2)元素:class属性设定所关联的类
双向一对多:在User到Order单向一对多关联关系基础上,在Order类中增加User类型的属性
Order.hbm.xml中添加user属性的映射
#元素属性:
name属性:指定需映射的属性名
column属性:指定ORDER中的外键列名
class属性:指定所关联的类型
实体关系多对多(n:n)
1)元素属性
name属性:指定类的属性名
table属性:指定多对多关联关系中间表
cascade级联操作属性:save-update、delete、all、none
2)子元素
元素:设定实体类对应表的外键
元素中class属性:设定关联类型
3)inverse属性是hibernate中双向关联关系中的基本概念,用来设置关系有哪一方来维护
#inverse=true表示被控方,inverse=false表示主控方(不放弃维护权)
#在多对多关系中需要设置哪一方为被控方