`
it农民
  • 浏览: 29421 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

数据库持久层是什么东西?(php+mysql为例)

阅读更多

    在我接触这个概念的时候好像是05年,那时候有hibernate出来很流行,各个企业招聘都不在只是j2ee了还要求struts和 hibernate,我当时理解的数据库持久层就是就是数据库长链接,觉得设计的目的就是为了减少数据库服务的链接压力,当然这个理解是完全错误的。数据 库持久层设计就是ORM(Object relationship map)设计,应该是从java的实体bean中汲取过来的。我们用的数据库大多是关系数据库,建立关系的实体是数据表,所谓的orm设计就是让对象和数 据库表之间建立映射关系,让我们操作数据表就像操作对象一样简单,表与表直接的关系映射成对象于对象之间的关系。可以简单的理解为,对象和数据表之间是一 一对应的,这样设计的好处不仅仅是简单,更重要的是便于移植和维护,让程序和数据库操作分离(远离SQL)。下边我们先说说关系数据库,数据实体之间的关 系。

     数据库建模的时候,比如我们用pd9.0,建立概念模型,pd会生成相应的逻辑模型和实体模型,这个也是一个比较复杂的工程,有专门的数据库建模教程,不 管是实体也好,还是概念也好,之间有4种关系:1、一对多;2、多对一;3、多对多;4、内联(这种关系很多教程和书面上都把他抛弃了,但是我个人觉得还 有必要存在),那映射出来的对象同样也是存在这样4种关系。接着说数据表的操作。

    我们用Sql操作数据表的时候,有四种操作:1、select;2、insert;3、update;4、delete;这是数据表操作最小四种因子,其 他不管是多复杂的操作都是基于这四种操作的,那同样映射到我们的对象也就是有说有四个基础方法。这个时候大概有个思路,就是ORM设计就是4种关系加上4 重操作构造一个对象实体,这样理解可以说正确也可以说不正确,因为对象不存在关系这么一说,只有方法和属性。

    现在讲讲为什么叫做持久层,这个持久并不是数据库资源是持久存在内存或者是cache中进行共享,而是映射的对象持久化,也就是系统只初始化一次映射关 系,以后就不再做映射,在hibernate中要配置hibernate-config.xml来映射,在上次提到的propel有专门的配置生成工具 (generator),在我自己修改后的autoCRUD也有这个工具,只是系统自己识别是不是要初始化(安装),总之一句话就是对象映射数据库表持久 化。

   现在我我们心中大概有一个设计框架,下边看看我们的例子,当然是伪代码:

   Class Orm_CRUD {
    var $table;
    var $name;
    var $key;
    var $fields = array();
    var $required = array();
    var $numeric = array();
    var $indexes = array();
    var $where;
    var $orderby;
    var $_php;
    var $_parent;
    var $_relationships = array();
    var $_joins = array();
    var $_aliases = array();

}

    上边的这些属性能不能完整的描述一个数据表,表名,主键,字段,非空字段,数字类型,索引,别名,关系,已经完全可以描述一个mysql数据表,其中的 where和orderby这些属性很明显了是为统一sql准备的。数据表描述OK了,每个数据列是不是要单独映射呢?答案是必要的,下边看看我们的每个 列的属性描述:

Class Orm_ColumCRUD {
    var $table;
    var $name;
    var $iskey;
    var $isnull;
    var $type;

    var $size;
    var $isrelationship;
    var $isindexes ;
    var $isunique;
    var $description

}

看了这些命名我想基本上清楚了,包含列所有属性,表名,字段名,类型,长度,为空,索引,关系,唯一,描述,主键。到这里 我们属性映射的工作基本上完成了,下边就应该是数据表操作的映射了。实际上在大多数的应用下列的映射基本上是没有的,也可以不要这个环节,把他的一些重要 的属性加入table的映射中,比如主键,是不是为空,等等,像autoCRUD就是这样设计的。

     我们对数据表的操作上边已经说过有四种,现在就不重复了,实际在现实情况中还有一种就是alter,修改表的属性,一般系统都不支持这样用,有两个风险, 第一数据库压力,第二就是持久层对象也需要跟着改变,在这里设计的时候我们忽略了这个问题,在设计好的数据库模型上设计ORM,这种经常alert操作在 现在比较时髦的自定义模型中用的比较多,自定义数据表字段,这个时候我们再设计ORM的时候,就应该考虑加上第五种,同时更新我们的对象映射。先就说到这 里,下篇再说方法和操作的映射。

3
0
分享到:
评论
2 楼 OnJavaRoad 2008-11-08  
  
1 楼 lugreen 2008-11-06  
 

相关推荐

    PHP+Mysql+FullCalendar日历拖动与数据保存

    在本项目中,“PHP+Mysql+FullCalendar日历拖动与数据保存”是一个结合了后端编程语言PHP、数据库管理系统MySQL以及前端日历插件FullCalendar的应用实例,旨在实现日程管理功能,允许用户通过拖放操作在日历上安排...

    php+mysql51招聘网站

    PHP还可以与MySQL数据库进行交互,执行查询、插入、更新和删除等操作,以实现数据的持久化存储。 MySQL,是流行的开源关系型数据库管理系统,以其高效、可靠和易用性而闻名。在招聘网站中,MySQL数据库用于存储各种...

    ssh2+mysql论坛完整代码和数据库文件

    SSH2是Java开发中常见的三层架构模式,其中Spring负责管理对象和依赖注入,Struts2处理前端请求和视图展示,Hibernate则作为持久层框架,简化了数据库操作。 1. **Spring框架**:Spring是核心的IoC(Inversion of ...

    PHP+MYSQL 许愿墙

    【PHP+MYSQL 许愿墙】是一个基于PHP编程语言和MySQL数据库系统的互动平台,主要用于创建一个用户可以发布愿望或留言的在线应用。该系统具备拖动功能,为用户提供了一种直观且友好的交互体验。 首先,`index.php`和`...

    CRM_T4+mysql数据库成功运行

    1. **InnoDB存储引擎**:MySQL默认的事务处理引擎,支持行级锁定,提供了ACID(原子性、一致性、隔离性、持久性)特性,适合并发环境。 2. **性能优化**:MySQL有丰富的优化工具和选项,如查询缓存、索引优化、分区...

    PHP_MYSQL_study.rar_PHP + mysql_php mysql

    MySQL是一个ACID(原子性、一致性、隔离性和持久性)符合的数据库系统,支持SQL标准,提供了强大的数据管理能力。其主要概念包括数据库、表、字段、记录和索引。创建、查询、更新和删除数据的基本操作是通过SQL语句...

    基于ssm+mysql在线租房系统源码数据库论文.doc

    MyBatis是一个基于Java的持久层框架,提供了一个灵活的方式来访问数据库。 MySQL数据库 MySQL是一个开源的关系数据库管理系统,提供了一个强大的数据存储和管理系统。MySQL数据库支持多种编程语言,包括Java、...

    基于ssm+mysql的在线汽车交易系统源码数据库论文.docx

    其中,用户层负责用户交互,业务层负责业务逻辑,数据层负责数据存储和检索,持久层负责数据库交互。 知识点6:系统可行性研究 系统可行性研究是指对系统的技术可行性、经济可行性和操作可行性的研究。在本系统中...

    php+mysql动态网站开发.rar

    1. **连接与操作MySQL数据库**:使用PHP的MySQLi或PDO_MySQL扩展,可以连接到MySQL数据库并执行SQL语句,如创建表、插入、查询、更新和删除数据。 2. **预处理语句**:为了防止SQL注入攻击,PHP中的预处理语句是一...

    基于ssm+mysql羽毛球交流平台系统源码数据库论文.docx

    SSM(Spring+SpringMVC+Mybatis)是一种常见的Java Web开发架构,Spring提供了依赖注入和AOP支持,SpringMVC提供了Web开发支持,Mybatis提供了数据库持久层支持。SSM架构具有灵活、可靠、跨平台等特点,广泛应用于...

    基于ssm+mysql的学生比赛指导管理系统源码数据库论文.docx

    * 持久层:使用MyBatis框架与MySQL数据库交互,实现数据的存储和检索。 系统功能模块 该系统主要包括以下几个功能模块: * 比赛信息发布模块:实现比赛信息的实时发布和更新。 * 在线报名模块:允许学生用户在线...

    基于ssm+mysql牛码小说网源码数据库论文.docx

    MyBatis是一个持久层框架,用于简化数据库的交互操作。 MySQL数据库介绍 MySQL是一个开源的关系型数据库管理系统,提供了一个功能强大且可靠的数据库解决方案。它支持多种存储引擎,包括InnoDB、MyISAM和Memory等...

    mysql数据库英文文献.doc

    MySQL数据库的架构与历史紧密相关,因此在理解MySQL时,我们不得不回顾它的起源和发展历程。MySQL的历史可以追溯到1979年,当时Monty Widenius在一家名为TcX的小公司工作,他创建了一个用BASIC语言编写的报表工具,...

    php+mysql oa办公系统源码

    2. 数据处理:PHP与MySQL数据库进行交互,执行SQL语句进行数据的增删改查操作,为OA系统提供数据支持。 3. 权限控制:PHP可以实现用户角色管理,比如员工、管理员和老板等不同角色的权限分配,通过会话管理...

    个人简易通讯录(jsp+javabean+mysql)

    MySQL是一个广泛使用的开源关系型数据库管理系统,用于持久化存储联系人信息。项目中可能创建了一个名为`contacts`的表,包含如`id`(主键)、`name`、`phone`和`email`等字段。使用SQL语句进行CRUD(创建、读取、...

    基于ssm+mysql的校园招聘信息管理系统源码数据库论文.docx

    MyBatis是一个持久层框架,提供了简洁、灵活的数据库交互方式。 MySQL数据库简介 MySQL是一个关系型数据库管理系统,广泛应用于Web应用程序的数据存储。MySQL提供了高效、可靠的数据存储和查询功能,支持多种编程...

    基于ssm+mysql在线考试系统源码数据库论文.docx

    MyBatis是一个持久层框架,提供了一个简洁的SQL映射器,可以将Java对象与数据库表之间的映射关系自动化。 知识点2:B/S结构 B/S结构是指Browser/Server结构,即浏览器/服务器结构。该结构将应用程序分为两部分:...

    基于SSM+mysql的万卷大学图书管理系统源码数据库论文.docx

    * Mybatis:提供了一个持久层框架,帮助开发者快速构建数据库应用程序。 mysql数据库是一个关系型数据库管理系统,提供了高效的数据存储和管理能力。mysql数据库支持多种编程语言,包括Java、Python、PHP等。 图书...

Global site tag (gtag.js) - Google Analytics