ORM&MySQL
概念:
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 :
ORM&MySQL的更多相关文章
- beego orm mysql
beego框架中的rom支持mysql 项目中使用到mvc模式,总结下使用方式: models中 package models import ( //使用beego orm 必备 "gith ...
- 利用EF ORM Mysql实体运行程序出错解决方案
程序环境:VS2013 + mysql (server 5.7 + connector net 6.9.9 + for visual studio 1.2.6) + entity framework ...
- 【开源框架】SqlSugarRepository 全库ORM 正式发布
SqlSugarRepository.dll 全库开发框架支持 四种数据库:SqlServer. MySql .Oracle和Sqlite. SqlSugarRepository是为全库开发而生的OR ...
- Ubuntu Server 16.04下ASP.NET Core Web Api + MySql + Dapper在 Jexus、nginx 下的简单测试
一.环境及工具 1.服务器 VirtualBox5.1.4 安装 Ubuntu Server 16.04 amd64 MySql Ver 14.14 Distrib 5.6.21 Jexus 5.8. ...
- Ubuntu 离线安装Mysql
一.安装包 先从网络上,下载Mysql安装包,复制到U盘 下载地址:https://dev.mysql.com/downloads/mysql/ 二.挂载U盘 2.1查看分区 先输入命令 cat ...
- mysql:视图,触发器,事务,存储过程,函数。
一 视图 1 什么是视图:视图其实就是通过查询得到一张表并且保存下来,就是一张虚拟的表,并非真实存在,比如我们将两个表在终端通过(inner join)内链接起来,那么我们得到的这个表就叫做视图,其 ...
- dos.ORM配置和使用
处理oralce,sqlserver,access及其他常用数据库,下载和学习地址 1.web.config配置数据库连接字符串,以及数据库类型: <connectionStrings>& ...
- mysql 事务 存储过程 函数
一:事务: 开启一个事务可以包含一些SQL语句,这些sql语句要么同时成功, 要么一个都别想成功, 称之我事务的原子性 事务用于将某些操作的多个SQL 作为原子性操作, 一旦有某一个出现错误, 即可以 ...
- Mysql 学习目录
Mysql 目录 Mysql之路[第一篇]:Mysql基础 Mysql之路[第二篇]:Mysql 常用命令 Mysql之路[第三篇]:Python对Mysql的操作 Mysql之路[第四篇]:ORM ...
随机推荐
- ASP.NET MVC下使用AngularJs语言(一):Hello your name
新春节后,分享第一个教程. 是教一位新朋友全新学习ASP.NET MVC下使用AngularJs语言. 一,新建一个空的Web项目.使用NuGet下载AngularJs和jQuery.二,配置Bund ...
- 【接口时序】1、软件与Verilog基本格式规范说明
一. 说明 以前总是没有记录的习惯,导致遇到问题时总得重新回忆与摸索,大大降低了学习效率,从今天开始决定改掉这个坏毛病,认真记录自己的Verilog学习之路,希望自己能一直坚持下去. 二. 软件资源与 ...
- 人工智能必须要知道的语义分割模型:DeepLabv3+
图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意味着要将图片根据内容分割成不同的块.相比图像分类和检测,分割是一项更精细的工作,因为需要对每个像素点分类,如下图的街景分割,由于对每个像素点 ...
- Java学习笔记54(反射详解)
反射概念: java反射机制是在运行状态中,对于任意一个类,都能知道所有属性和方法 对于任意一个对象都能调用它的任意一个方法和属性,这种动态获取和调用的功能称为java的反射机制 实际作用: 已经完成 ...
- axios的Get和Post方法封装及Node后端接收数据
最近有做一个Vue的小项目,其中用到了尤大大推荐使用的axios,但是使用的过程中遇到了各种各样的问题,所以这次也是将一些心得分享出来. 安装的流程我就简单说一下下吧,在一个自己新建的文件夹中命令行中 ...
- C语言判断大小端的几种方法
在操作系统中,经常会用到判断大小端,很多面试题中也会经常遇到,以前的时候没有总结过,这里总结一下. 以后用到了就直接可以用了. 所谓的大小端,大致的解释意思就是: [大端模式] CPU对操作数的存放方 ...
- git 服务器搭建及提交代码检查
本地 git 服务,通常都会选择 gitlab.本人最先也是选择 gitlab,在 centos7 上按照官网的步骤进行安装,下载的速度难以忍受,无奈放弃.最终选择在 docker 中安装 gogs ...
- [Leetcode]59.螺旋矩阵Ⅱ
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, ...
- HDU 5517---Triple(二维树状数组)
题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...
- Xamarin.Android 使用 Encoding.GetEncoding("GB2312") 报错解决方案
问题描述:使用byte转换成汉字编码格式,debug模式下可以正常运行,但是release模式下就会出现死机问题. 排除过程:最开始不知道是编码格式转换错误,于是把相关代码块注释掉,然后进行relea ...