hibernate1

来源:互联网 发布:销售单打印软件免费版 编辑:程序博客网 时间:2024/06/03 04:56

应用程序的分层体系结构发展


双层应用

-应用程序层

-数据库层

三层应用

-表示层

-业务逻辑层

-数据库层

四层应用

-表示层

-业务逻辑层

-持久化层

-数据库层


层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件的API,

而下层组件不应该依赖上层组件。eg:表示层依赖义务逻辑层,而业务逻辑层依赖于数据库层。


每个层对于上层公开PAI,但具体的实现细节对外透明。当某一层的实现发生变化时,只要它的

API不变,不会影响其他层的实现。eg:声明一个UserDao接口,具体类UserDaoImpl 实现UserDao接口,业务层针对UserDao接口编程,

我们可以将UserDaoImpl换成User2DaoImpl而业务逻辑层不需要任何的变化。上层只关心下层提供的接口。

Java应用的持久化层



其中业务逻辑层之上可以加上Action.Action只负责数据的转换,数据的校验,对象组装等,不涉及任何的业务逻辑。

持久化层中访问数据库中的代码都是细粒度的,可能一个业务逻辑层的方法里调用持久层多个操纵数据库的方法,因此事务(数据库中的事务)应该放在业务逻辑层。


软件模型:

在软件设计的阶段,需要创建域模型和数据模型,其中

域模型就是我们程序中使用的对象,数据模型就是数据库中的数据。


概念模型用来模拟问题域中的真实实体。

概念模型描述了每个实体的概念和属性以及实体之间的关系。

概念模型并不描述实体的行为。


购物网站概念模型:


实体与实体之间存在三种关系

Customer和Order的实体:一对多:一个客户有多个订单,一个订单只能属于一个客户。

Category和Item实体:多对多:一个商品类别包含多个商品,而一个商品可以属于多个商品类别。

Order和Item实体:多对多:一个订单包含多个商品,而一个商品可以属于多个订单。

Customer和ShoppoingCart实体:一对多:一个客户有多个购物车,而一个购物车只能属于一个客户。

ShoppingCart和Item实体:多对多:一个购物车可以包含多个商品,而一个商品可以属于多个购物车。

关系数据模型

关系数据模型是在概念模型的基础上建立起来的,用于描述这些关系数据

的静态结构,它由一下的内容组成:

-一个或多个表

-表的索引

-视图

-触发器

-表与表之间的参照完整性

表的主键

-在关系数据库表中,用主键来识别记录并保证每条记录的唯一性。

作为主键的字段必须满足以下条件:

-不允许为null。

-每条记录具有唯一的主键值,不允许主键值重复

-每条记录的主键值永远不会改变

使用代理主键机制,代理主键不具有具体义务含义,不会被改变。(mysql 中的auto_increment)


用连接表来表示多对多关系

域模型

-域模型是面向对象的。在面向对象术语中域模型也成为设计模型。

模型域有以下内容组成:

-具体状态和行为的域对象

-域对象之间的关系

》关联

》依赖

》聚集

》一般化(泛化)


实体域对象

---实体对象可以代表人,地点,事物或概念。eg:

客户,订单,商品等作为实体域对象。

---对于J2EE Web应用,这些名词可以作为包含状态和行为的JavaBean.

采用JavaBean形式的实体域对象也成为POJO(Plain Old Java Object).

---为了使实体域对象与关系数据库表中的记录对应,可以为每个实体域

对象分配唯一的OID(Object Indentifier,即对象标识符),OID是关系数据库

表中的主键(通常为代理主键)在实体域对象中的等价物。

表Person
其中的字段:id ,name,age,address


public class Person {
private int id;
private String name;
private int age;
private String address;
}


表中的一行记录映射成为一个Person对象,就有数据库中的关系变成程序中的对象。

域对象持久化的概念


广义的理解,持久化包括和数据库相关的各种操作:

-保存:把域对象永久的保存到数据库中。

-更新:更新数据库中域对象的状态。

-删除:从数据库中删除一个域对象。

-加载:根据特定的OID,把一个域对象从数据库加载到内存中。

-查询:根据特定的查询条件,把符合查询条件的一个或者多个域对象从数据库加载到内存中。

通过JDBC API 来持久化实体域对象

-Java应用访问数据库的最直接的方法就是直接访问JDBC API

-java.sql包提供了JDBC API。在java.sql包中常用的接口和类包括:

--DriverManager:驱动程序管理器,负责创建数据库连接。

--Connection:代表数据库连接。

--Statement:负责这行sql语句。

--PreparedStatement:负责执行sql语句,具有预定义sql语句的功能。

-ResultSet:代表sql查询语句的查询结果集。

jDBC缺点:

在程序代码中嵌入面向关系的sql语句,是开发人员不能完全运用面向对象的思维来

编写程序。

业务逻辑和关系数模型绑定,如果关系数据模型发生变化,例如修改了customers表的结构,

那么必须手工的修改代码中所有的相关的sql语句,这增加了维护软件的难度。

原创粉丝点击