当前位置: 首页 > 后端技术 > Java

JAVA中常见的ORM框架总结——附上一个eloquent-orm

时间:2023-04-01 16:51:45 Java

ORM是ObjectRelationalMapping的缩写,译为“对象关系映射”框架。所谓ORM框架是一种解决面向对象和关系数据库中数据类型不匹配的技术。它通过描述Java对象与数据库表的映射关系,自动将Java应用中的对象持久化到关系型数据库中。数据库中的表。ORM框架是一种数据持久化技术,它在对象模型和关系数据库之间建立对应关系,提供一种通过JavaBean对象操作数据库表中数据的机制。在实际开发中,程序员使用面向对象的技术来操作数据,但是在存储数据的时候,使用的是关系型数据库,这就造成了很多不便。ORM可以在对象模型和关系数据库的表之间架起一座桥梁,程序员可以使用API??直接操作JavaBean对象,实现数据的存储、查询、修改和删除等操作。MyBatis框架使用简单的XML或注解进行配置和原始映射,建立实体类和SQL语句之间的映射关系。它是一个半自动的ORM实现。主流的JavaORM框架目前有很多JavaORM框架产品。常见的框架有Hibernate和MyBatis。主要区别如下。1)HibernateHibernate框架是一个全表映射框架。通常,开发者只要定义好持久化对象与数据库表的映射关系,就可以通过Hibernate框架提供的方法完成持久层操作。开发者不需要精通SQL语句的编写。Hibernate框架会根据编译后的存储逻辑自动生成相应的SQL,并调用JDBC接口执行,因此其开发效率会高于MyBatis框架。但是Hibernate框架本身也存在一些不足,比如:多表关联时对SQL查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;性能不能通过优化SQL来优化。这些问题使得它只适合在场景不太复杂、性能要求不高的项目中使用。Hibernate官网:http://hibernate.org/2)MyBatisMyBatis框架是一个半自动映射框架。这里所谓的“半自动”是相对于Hibernate框架的全表映射来说的。MyBatis框架需要手动提供POJO、SQL和映射关系,而Hibernate框架只需要提供POJO和映射关系即可。与Hibernate框架相比,虽然使用MyBatis框架手动编写SQL比使用Hibernate框架工作量大,但是MyBatis框架可以配置动态SQL和优化SQL,通过配置确定SQL映射规则,支持存储过程。对于一些需要优化性能的复杂项目,使用MyBatis框架显然更合适。MyBatis框架可以应用于需求不断变化的互联网项目,比如电子商务项目;Hibernate框架可以应用于需求明确、服务固定的项目,如OA项目、ERP项目等。3)gaarason使得连接数据库和增删改查数据库变得非常容易,是否你想使用原生SQL、查询构建器或EloquentORM。EloquentORM为处理数据库提供了一个漂亮而简单的ActiveRecord实现。每个数据表对应一个实体(Entity)对应表的数据结构,以及一个模型(Model)进行交互。通过模型类,可以对数据表进行查询、插入、更新、删除等操作,并将结果体现在实体实例化的java对象中。对于关联关系,EloquentORM提供了富有表现力的声明方式和简洁的使用方式,并着重于内部查询和内存优化。它在复杂的关系中仍然有很好的体验。兼容其他常用的ORM框架,以及常用的数据源(DataSource)//查询一条id为4的数据select*fromstudentwhereid=4limit1Studentstudent=studentModel.find(4).toObject();//表达式列名称样式selectname,agefromstudentwhereidin(1,2,3)ListStudents=studentModel.newQuery().whereIn(Student::getId,1,2,3).select(Student::getName).select(Student::getAge).get().toObjectList();//稍微复杂的嵌套语句selectid,namefromstudentwhereid=3or(age>11andid=7and(id4到10岁和年龄>11))ListStudents=studentModel.newQuery().where("id","3").orWhere(builder->builder.where("age",">","11").where("id","7").andWhere(builder2->builder2.whereBetween("id","4","10").where("age",">","11"))).select("id","name").get().toObjectList();//关联查询找出学生的老师和父亲的房子ListStudents=studentModel.newQuery().whereIn("id","1","2","3").get().with("teacher.father.house").toObjectList();//添加关联以将3名教师添加到id为8的学生(id分别为1,2,3)studentModel.findOrFail(8).bind("teachers").attach(teacherModel.findMany(1,2,3));gaarason中文文档:https://github.com/gaarason/d...4)springdataJPAspirngdatajpa是spring提供的简化JPA开发的框架,按照约定的【方法命名规则】编写dao层接口,不需要写接口实现就可以访问和操作数据库,同时提供CRUD之外的很多功能,比如分页、排序、复杂查询等。SpringDataJPA可以理解为对SpringDataJPA的再封装抽象JPA规范,底层依然使用Hibernate的JPA技术实现。