使用框架操作数据库的几个要求

1.安全,比如防止sql注入等,pdo里面prepare,execute 就可以

2.性能,数据库操作是最基本的操作,频繁使用,需要考虑到执行效率

3.ORM(object relation mapper)可以将数据映射到一个类当中,pdo也是支持的,

4.支持多种数据库(不常用)

5.能使用第三方插件,比如现在需要对五个表进行排序,可以将排序功能封装起来,每个表都可以使用去实现各自的排序功能,这时就可以从网上下载第三方代码,只需要继承该代码

即可实现排序功能。即自动实现相同功能的集合

。。。。很明显Doctirne这些条件都满足了

下面我们对Doctirne2先进行一个预览

  1. /**
  2. * @Route("/")
  3. */
  4. class DefaultController extends Controller
  5. {
  6. /**
  7. * @Route("/index",name="page_index")
  8. * @Template()
  9. */
  10. public function indexAction()
  11. {
  12. $user = $em->getRepository('User')->findOneBy(array("id"=>1));
  13. $user->setName("test");
  14.  
  15. foreach($user->getAdressBooks() as $adressBook){
  16. echo $adressBook->getName();
  17. }
  18. $em->presist($user);
  19. $em->flush();
  20.  
  21. }
  22. }

可以看到,首先$em是传进来的一个对象,getRepositor('User')获取user信息,之后以id为1进行分类,返回一个用户数组给$user

,setName()  对用户的名字进行设置,$em->presist()将我们更改的信息交给$em托管,之后$em会自动进行处理,生成一个update语句,更改表中id为1的名字,flush() 刷新即完成更改。

中间的getAdressBooks,是假定user表和adressbooks表示一对多的关系,获取该用户对应的所有adressbooks,遍历并输出其name。、

可以看到没有像之前一样,编写复杂的sql语句进行查询更新,就完成了这些操作。在symfony网页下方也可以查看生成的sql语句

下面先了解几个基本的doctrine2概念,之后进行配置

1.Entity

类似于一个对象, 里面有各种字段以及属性,并且像mysql一样,其间有各种关系。比如刚才所用$em就是

2.Repository

一个操作集合,比如前面的getRepository()->findOneBy();将查找用户操作放在getRepository里面,选取相应的操作即可,

将数据库相关的业务逻辑操作封装起来,直接调用就行,

3.Proxy

像之前的$user,他并不是一开始就将所有SQL语句都生成出来,将所有信息都存放在$user之中,而是当你需要哪个信息的时候,

他才生成sql语句,执行查询操作,得到相应数据,相当于句动态查询的。

而当还没有查询之前的$user,就处于proxy状态,虚拟状态,用到的时候才会将其 实例化进行使用.

4.DQL语句

构建查询语句,比sql更简单一些,

  1. $query = $em->createQuery(
  2. select u from database:User p where u.name=:name'
  3. )setParameter('name','scourgen');

上面的例子就是一个dql查询语句

下面的例子和上面的等价,不过是动态构建了一个DQL语句,更为面向对象化,可以将每一个语句都当做一个方法去替换他

  1. $query = $em->getRepository('User')->createQueyBuilder('U')
  2. ->where('u.name=:name')
  3. ->setParmameter('name','scourgen')
  4. ->getQuery();

5.事件监听机制

比如现在有一个事件会做很多事情,如果要每次都手动都添加时间戳进行记录,会很麻烦。所以DOCTRINE2为我们提供了这种自动监听机制,不需要去手动监听

Doctrine2-基础概念的更多相关文章

  1. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  2. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  3. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  4. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  5. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  6. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  7. RabbitMQ基础概念详细介绍

    http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...

  8. linux设备驱动归纳总结(二):模块的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...

  9. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...

  10. 什么是JavaScript闭包终极全解之一——基础概念

    本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...

随机推荐

  1. [洛谷P1357] 花园

    题目类型:状压\(DP\) -> 矩阵乘法 绝妙然而思维难度极其大的一道好题! 传送门:>Here< 题意:有一个环形花圃,可以种两种花:0或1. 要求任意相邻的\(M\)个花中1的 ...

  2. 利用fis3构建前端项目工程

    FIS3是国内百度公司产出的一款前端工程构建工具,FIS3可以解决前端工程中性能优化.资源加载(异步.同步.按需.预加载.依赖管理.合并.内嵌).模块化开发.自动化工具.开发规范.代码部署等问题,首先 ...

  3. 计算机基础理论知识梳理篇(一):数据类型长度、内存页、IPC

    字长与数据类型长度 字长指CPU在同一时间能够处理二进制数据的位数,是由其外接数据总线(地址总线决定了CPU的寻址空间,如16位微型机的地址总线为20位,其可寻址空间为220 = 1MB)的条数决定的 ...

  4. 2017-12-19python全栈9期第四天第二节之列表的增删查改之按切片删除

    #!/user/bin/python# -*- coding:utf-8 -*-li = ['zs','ls','ww','zl','xx']# del li[1:] #1到最后# print(li) ...

  5. 苹果手机iOS11中fixed弹出框中input光标错位问题

    最近遇到了一个移动前端的BUG:手机弹出框中的输入框focus时光标可能会错位. 刚开始时我完全不知道错误原因是什么,在电脑上调试时完全没有问题,手机上出现问题时也没有找到规律.后来在网上搜索了大量的 ...

  6. Correction suggestions

    1. title: A remark on the global existence of weak solutions to the compressible quantum Navier-Stok ...

  7. Windows下VSCode编译调试c/c++

    参考链接:  https://blog.csdn.net/c_duoduo/article/details/51615381 支持makefile编译: https://www.cnblogs.com ...

  8. Centos 06 文件类型和扩展名&索引节点inode和存储块block

    本节内容 1.文件类型 2.文件扩展名 3.索引节点inode和block块 首先需要申明一点, 1.在linux里面文件扩展名和文件类型是没有关系的 2.为了容易区分和兼容用户使用windows的习 ...

  9. Linux 踩过的坑系列-01

    关于默认网关的添加.记得楼主之前有一次,无意之间,也不知道做了什么删除文件里面内容的操作,配置好静态IP之后上不了外网.翻阅个各种资料都是没有找到问题.最后发现问题在于配置的虚拟机网卡文件的网关打错了 ...

  10. 新手入门django本地化服务

    自动化安装          #更新依赖库          pip install --upgrade setuptools #安装指定的版本 pip install Django==2.0.4 文 ...