ORMMySQL

概念:

ORM:对象关系映射 , 全拼 Object-Relation Mapping ,是一种为了解决面向对象与关系数据库存在的互不匹配现象的技术。主要实现模型对象到关系型数据库数据的映射.比如:把数据库表中每条记录映射为一个模型对象

 

使用原因:

若不使用ORM框架实现一个应用程序时,我们可能会写特别多数据访问层的代码,从数据库保存、删除、读取对象信息,而这些代码都是重复的。而使用ORM则会大大减少重复性代码。对象关系映射主要实现程序对象到关系数据库数据的映射。

 

ORM的核心原则: 
  · 简单:以最基本的形式建模数据。比如将MySQL的一张表映射为一个python类,表中的字段就是此类的属性.
  · 传达性:将数据库结构转化成能够被任何人理解的语言文档化。比如MySQL的一张表就被ORM转化为了一个python程序员熟悉的python类
  · 精确性:ORM将所有的mysql数据表都统一映射成了标准的python类,保持在代码层面上的准确统一。

  · 易用:ORM将所有的对于持久化对象的CRUD操作全部都封装成了方法,通过这种封装避免了不规范、冗余、风格不一的SQL语句,方便编码风格的统一和后期维护。 

 


ORM 作用 :
1. 将定义数据库 `模型类 ` --->  数据库表
2. 将定义数据库模型类中的 `属性`  --->  数据库表字段
3. 将模型对象的操作(add,delete,commit)  --->  对应sql语句,并将执行结果提交到数据库

 


优点 :
0.只需要面向对象编程, 不需要面向数据库编写代码.
1.实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.

2.使得迁移数据库变得十分方便,可移植性高,如果项目需要更改数据库时,直接修改配置即可,无需考虑另一种数据库的语法差异.

3.省时高效率开发,降低开发成本 ,不再需要写复杂冗长的SQL语句,仅仅关心具体的业务逻辑实现即可.


缺点 :
0.相比较于直接使用SQL语句操作数据库,有性能损失.
1.根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失.

2.持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口 
3.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。 

4.ORM的缺点是会牺牲程序的执行效率和会固定思维模式。 

5.在对对象做持久化时,ORM一般会持久化所有的属性,但有时这是不被期望的
6.在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂

CURD :

数据库基本操作中的Create(创建)、ReadRetrieve(读取)、Update(更新)、Delete(删除)。

 

SQL结构化查询语言 :

DQL: 数据查询语句/数据的查询(select)
DML: 数据操作语句/数据的增删改(insert delete updata)
DDL: 数据定义语句/库和表的操作(create drop)
DCL: 数据控制语⾔, 进⾏授权与权限回收,(grant、 revoke)

TPL: 事务处理语言,对事务进行处理,包括begin transaction、 commit、 rollback
DCL: 数控制语言,进行授权与权限回收,如grant、 revoke

 

MySQL数据完整性包括 :

实体完整性,保证某一条记录的唯一性,主要有 主键约束[primary key]&唯一键约束,一张表仅能有一个null[unique key]
域完整性,保证某一字段的类型或约束,主要有 非空[not null]&默认值[default xxx]
参照完整性,限制表之间的规则,即外键,主要有 外键约束[foreign key]
用户定义完整性,用户对某一字段的进一步控制范围,限定约束

 

事务的特性(ACID) :
原子性A,事务中的全部操作在数据库中是不可分割的,要么全部执行,要么均不执行
一致性C,几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致
隔离性I,事务的执行不受其他事务的干扰,事务的执行的中间结果必须对其他事务透明
持久性D,对于任意已提交的事务,系统必须保证该事务对数据库的该表永不丢失,即使数据库出现故障

 

数据库分类 :

关系型数据库: Oracle , MySQL , SQLite,基于关系模型的数据库,是一个 二维表模型和表之间关系 的集合,适合于关系特别复杂的数据查询场景.
非关系型数据库(nosql): mongDB , Redis,不基于关系模型,不是二维表模型,强调以 key - value 格式存储数据,比关系型数据库更加灵活和可扩展,基本不支持事务.

 

MySQL & Redis :

 

转载于:https://www.cnblogs.com/hsmwlyl/p/10576148.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现WM下删除最后一条匹配的通话记录

代码很简单就是操作EDB数据库,先按开始时间降序排序,然后删除第一条匹配的记录。 1 boolDeleteLastCallLogByNumber(LPCTSTR lpszNumber)2 {3 typedef enum4 {5 CT_Reserved0,6 CT_Outgoing1,7 CT_Connected2,8 CT_Ended4,9 CT_Voice_Data8,10 CT_Roam16…

std::string中的反向迭代器rbegin()和rend()

在std::string中,有个接口是rbegin()和rend(),分别表示string字符串的倒数第一个字符和正数第一个字符; rbegin():表示string字符串的倒数第一个字符 rend():表示string字符串的正数第一个字符 分为普通的iterator和…

【转】[教程] CSS入门3:如何插入CSS样式

http://bbs.blueidea.com/forum.php?modviewthread&tid2524742 转载于:https://www.cnblogs.com/lzhitian/archive/2012/11/25/2787164.html

5.spiders(文件夹)

一、基础知识 1. Spiders 文件夹 用于编写爬虫规则,可以在已有的___init__.py文件中编写具体的爬虫规则但是实际开发中可能有多个爬虫规则,所以建议一个爬虫规则用一个文件表示,这样便于维护和管理 2. 代码 # -*- coding: utf-8 -*- import s…

unlink(file_name)

官方描述: unlink的文档是这样描述的: unlink() deletes a name from the filesystem. If that name was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse. …

sql server行级锁,排它锁,共享锁的使用

一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读 A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修…

日常学习笔记(1)

2019/03/19 21:12 1.函数:numpy.linspace(start,stop,num50,endpointTrue,retstepFalse,dtypeNone)参数: start:scalar类型(个人理解是标量的意思,这不是一个具体的数据类型,而是指某一些数据类型&#xff…

淘宝开发平台知识点一,入门指南

App Key:12038991 App Secret:bb6e1d29db744ed023bfed6a3af6f4f3 1,测试环境下,获取授权码,只有十分钟 http://open.taobao.com/isv/authorize.php?appkey12038991 2,http://container.api.tbsandbox.com/container?…

【转】Linux 下修改Tomcat使用的JVM内存大小

转自 :http://blog.csdn.net/sully2008/article/details/6457570 我的服务器的配置:# OS specific support. $var _must_ be set to either true or false.JAVA_OPTS"-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize512m -XX:MaxPermSize2048m"…

OpenSSL 创建自签名证书

1、生成服务器私钥openssl genrsa -out client.key 40962、生成证书签名请求(CSR)openssl req -new -key client.key -out client.csr3、使用上一步的证书签名请求签发证书openssl x509 -req -days 365 -in client.csr -signkey client.key -out client.…

C++ functor 仿函数

在C中,仿函数不是一个函数,是一个类,这个类实现了函数的功能。 如果我想实现一个求和的功能:定义一个Sum类,让其中的()函数实现这个功能,代码如下: class Sum { public:Sum() default;virtua…

C#中实现鼠标拖动窗体的方法

用C#实现鼠标拖动窗体,方法可能有很多,不过我想最好多还应该是直接记录鼠标的位置,进而完成操作: private void AddList_MouseDown(object sender, MouseEventArgs e){// Gets the x-coordinate and y-coordinate of …

Sql Server 2008将数据库导出sql脚本并导出数据

1.使用Sql Server Management Studio 2008 连接数据库。 2.选中要导出数据的数据库节点,点鼠标右键,在菜单中选择“任务”->“生成脚本”,如图: 3。在弹出的界面中,点2次“下一步”进入如图界面中,把“编…

SQL SERVER 查询表的行数

SELECT OBJECT_NAME(ii.id) TableName ,rows FROM sysindexes ii INNER JOIN sysobjects oo ON ( oo.id ii.idAND oo.xtype U ) WHERE ii.indid < 2 ORDER BY rows desc ; 转载于:https://www.cnblogs.com/JinweiChang/p/10592680.html

C/C++中的占位符

在C、c语言中增加了占位符&#xff0c;目的是为了减少内存的使用&#xff0c;但是现在内存已经不是瓶颈了&#xff0c;进而很少用占位符了 union V {struct X {unsigned char s1:2;unsigned char s2:3;unsigned char s3:3;} x;unsigned char c; } v; v.c 100; printf("%d…

Book

Folksonomies: Indexing and Retrieval in the Web 2.0 202转载于:https://www.cnblogs.com/kuiyuan/archive/2010/04/06/1705811.html

男性早孕-从软件与程序的区别说起

引言 今日新闻《如此医院太荒唐大小伙子被查出“早孕”》&#xff0c;百度搜索结果如下&#xff1a; 看到这结果&#xff0c;大家啥感想&#xff1f; 按常理&#xff0c;医院粗心、医疗机构忽视患者权益、经济利益的恶性驱动等等言论&#xff0c;唾沫星子基本足以把肇事医院来个…

spring-boot+swagger实现WebApi文档

1、引用依赖包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.5.0</version> </dependency <dependency><groupId>io.springfox</groupId><artifact…

如何使用单线程处理高并发

单线程相当于一个队列&#xff0c;只能按照顺序执行&#xff0c;如果要实现高并发&#xff0c;可以借助下面的方式&#xff1a; (1)、IO多路复用技术 (2)、采用事件驱动模型&#xff0c;基于异步回调来处理事件来

Sql优化文档

sql 优化 目的 数据库参数进行优化所获得的性能提升全部加起来只占数据库应用系统性能提升的40%左右&#xff0c;其余60%的系统性能提升全部来自对应用程序的优化。许多优化专家甚至认为对应用程序的优化可以得到80%的系统性能提升。因此可以肯定&#xff0c;通过优化应用程序来…