ORM框架

一、什么是ORM框架

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术 ORM框架是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。 主要目的:操作实体类就相当于操作数据库表 建立两个映射关系

实体类和表的映射关系实体类中属性和表中字段的映射关系

二、对象—关系映射解释

**简单:**ORM以最基本的形式建模数据。比如ORM会将MySQL的一张表映射成一个Java类(模型),表的字段就是这个类的成员变量 **精确:**ORM使所有的MySQL数据表都按照统一的标准精确地映射成java类,使系统在代码层面保持准确统一 **易懂:**ORM使数据库结构文档化。比如MySQL数据库就被ORM转换为了java程序员可以读懂的java类,java程序员可以只把注意力放在他擅长的java层面(当然能够熟练掌握MySQL更好) **易用:**ORM包含对持久类对象进行CRUD操作的API,例如create(), update(), save(), load(), find(), find_all(), where()等,也就是讲sql查询全部封装成了编程语言中的函数,通过函数的链式组合生成最终的SQL语句。通过这种封装避免了不规范、冗余、风格不统一的SQL语句,可以避免很多人为Bug,方便编码风格的统一和后期维护。

三、为什么使用ORM

ORM的优点

提高开发效率,降低开发成本使开发更加对象化可移植可以很方便地引入数据缓存之类的附加功能 缺点:

自动化进行关系数据库的映射需要消耗系统性能。其实这里的性能消耗还好啦,一般来说都可以忽略之。在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂 当我们实现一个应用程序时,我们可能会写特别多数据访问层的代码,从数据库保存、删除、读取对象信息,而这些代码都是重复的。使用ORM则会大大减少重复性代码,这就是使用ORM的原因

四、常用框架

1、JAVA

(1)Hibernate

Hibernate的主页为:http://www.hibernate.org/。 Hibernate的下载地址为:http://hibernate.org/orm/downloads/。 HibernateTools的下载地址为:http://www.jboss.org/tools/download/ Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO(普通JAVA对象)与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用 Hibernate的体系结构和开发步骤

创建持久化类创建对象-关系映射文件创建Hibernate配置文件通过Hibernate API编写访问数据库的代码 Hibernate的5个核心接口

Configuration:负责管理hibernate配置信息SessionFactory:负责创建session实例Session:是hibernate持久化操作的基础,提供了众多的持久化方法Transaction:是hibernate进行事务操作的接口,是对实际事务实现的一个抽象,这些实现包括JDBC的事务,JTA中的UserTransaction,甚至可以是CORBA事务。Query和Criteria接口 :查询接口,用于向数据库查询对象,包装了HQL查询语言,采用了新的面向对象的查询方式。 Hibernate执行过程

通过Configuration config = new Configuration().configure();//读取并解析hibernate.cfg.xml配置文件由hibernate.cfg.xml中的读取并解析映射信息通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactorySession session = sf.openSession();//打开SesssionTransaction tx = session.beginTransaction();//创建并启动事务Transationpersistent operate操作数据,持久化操作tx.commit(); //提交事务关闭Session关闭SesstionFactory

然而 Hibernate 框架自身也存在一些缺点,例如:

多表关联时,对 SQL 查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;不能通过优化 SQL 来优化性能

(2)MyBatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录 Mybatis框架的原理

读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。

MyBatis的优点

简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。提供xml标签,支持编写动态sql Mybatis的缺点 (1)SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。 (2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库

2.Python

(1)SQLObject

SQLObject是一种流行的对象关系管理器,用于为数据库提供对象接口,其中表为类,行为实例,列为属性。SQLObject包含一个基于Python对象的查询语言,使SQL更抽象,并为应用程序提供了大量的数据库独立性。优点:

采用了易懂的ActiveRecord 模式一个相对较小的代码库 缺点:

方法和类的命名遵循了Java 的小驼峰风格不支持数据库session隔离工作单元

(2)Flask-SQLAlchemy

flask默认提供模型操作,但是并没有提供ORM,所以一般开发的时候我们会采用flask-SQLAlchemy模块来实现ORM操作。SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: