Mybatis difference and hibernate persistence face questions [Comparative]

Mybatis Features:

benefit:

By directly writing SQL statements, you can optimize performance for SQL directly;

Low learning curve, lower learning costs. As long as there are SQL-based, you can learn mybatis, and very easy to use;

As a direct writing SQL statements, so flexible, and better code maintenance.

Disadvantages:

Can not support independent of the database, ie the database is changed, write code to support multiple sets, portability is not good.

Mysql:limit

Oracle:rownum

You need to write the results of the mapping.

Hibernate technical characteristics:

benefit:

Standard orm framework, programmers need to write SQL statements.

Good database-independent, that is, the database is changed, then the code without having to write again.

Later , mysql data migration to the Oracle , only need to change the configuration dialect

Disadvantages :

High learning curve, needs to have a good foundation for the relational model of data, but also in setting OR mapping, need to consider the trade-off of good performance and object model.

Programmers can not be independent to conduct SQL performance optimization.

 

Mybatis scenarios:

Changing needs of the Internet project, such as electricity providers project.

Hibernate application field scene:

Clear demand, business fixed items, such as OA project, ERP projects.

Detailed summary:

  1. JDBC: java data base connection, but provides an interface implemented by the database vendor.
  2. JDBCTemplate: embedded in the Spring Framework, JDBC package of disadvantages: not cached
  3. Mybatis: Notes + xml + Java technology reflection
  4. Hibernate: do not write sql, packaging HQL + Distributed Transaction

 

A, JDBC
describes
JDBC (Java DataBase Connectivity, java database connectivity) to access a variety of databases. JDBC specification defines an interface specific implementation implemented by the major database vendors. Each database vendors according to their own database to prepare their own communication format database drivers, database drivers supplied by the database vendor.

 

Step Development
Development step:
we usually use jdbc programming generally requires the following steps:
1 using jdbc programming tied to a database, and database information registration drive
2, the operation Connection, opens Statement object
3, performed by the SQL Statement object, returns results ResultSet object to
4, a ResultSet read data, then the code is translated into concrete objects POJO
5, close the resource database associated
advantages and disadvantages of
the benefits of using JDBC:

We will only need to call a method in JDBC interface can be, simple
to use the same set of Java code, minor modifications can access other JDBC supported database
disadvantages of jdbc:
a: the workload is relatively large, complex programming; need to connect, The process then jdbc underlying transaction, the type of data processing,

Two: need to operate Connection, Statement, and ResultSet objects and data objects get close to them.

 JDBC shortcomings and resolve the reference scenario:

         1, create a database connection, release cumbersome system resources are wasted , which can affect system performance, if you can use the database connection pool to resolve this problem.

         2,Sql语句在代码中硬编码,造成代码不易维护,实际应用Sql变化可能较大,如果sql一变动就要更改java代码。

         3,使用PreparedStatement向占位符传参存在硬编码,因为Sql语句的where条件不一定,可能多也可能少,修改sql还要修改java代码,系统不易维护。

        4,对结果集解析存在硬编码(列名),sql变化导致解析的java代码变化,系统不易维护,如果能将数据库库封装成pojo对象解析比较方便。

 

二、JDBCTemplate

     

  JdbcTemplate针对数据查询提供了多个重载的模板方法,你可以根据需要选用不同的模板方法.如果你的查询很简单,仅仅是传入相应SQL或者相关参数,然后取得一个单一的结果,那么你可以选择一组便利的模板方法

  • 优点:运行期:高效、内嵌Spring框架中、支持基于AOP的声明式事务
  • 缺点:必须于Spring框架结合在一起使用、不支持数据库跨平台、默认没有缓存

JDBC已经能够满足大部分用户最基本的需求,

但是在使用JDBC时,必须自己来管理数据库资源如:获取

PreparedStatement,设置SQL语句参数,关闭连接等步骤。

JDBCTemplate就是Spring对JDBC的封装,目的是使JDBC更加易于使用。

JDBCTemplate是Spring的一部分。 

JDBCTemplate处理了资源的建立和释放。

他帮助我们避免一些常见的错误,比如忘了总要关闭连接。​

他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。

使用JdbcTemplate编程我们只需要做以下步骤:

1)提供SQL语句和占位符的值

2)得到封装好的查询结果集   

 

使用步骤

使用步骤  

1) 导入依赖的jar包(c3p0连接池、mysql驱动、spring相关)

2) 准备连接池

3) 创建 JdbcTemplate 对象,传入连接池对象

4) 编写SQL语句

5) 调用 execute()执行 DDL、update()执行 DML、queryXxx()执行 DQL 等方法

 

jdbcTemplate.queryForObject("select * from user where name=? and password=?",
                                                             new BeanPropertyRowMapper<>(User.class), name, password);

 

三、Hibernate
ORM模型
ORM取代了JDBC,所有的ORM模型都是基于JDBC进行封装的,不同ORM模型对JDBC封装的强度是不一样的

ORM

对象关系映射(Object Relational Mapping),简单的说ORM框架就是数据库的表和简单Java对象的映射关系模型,我们通过这层映射关系就可以简单迅速地把数据库表的数据转化为POJO
如图

Hibernate介绍

       Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,

即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。

执行过程
1、读取配置文件完成ORM的映射关系
2、获取session进行增删改查的操作

hibernate工作原理:
1、通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件。
2、由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>读取解析映射信息。
3、通过config.buildSessionFactory();//得到sessionFactory。
4、sessionFactory.openSession();//得到session。
5、session.beginTransaction();//开启事务。
6、persistent operate;
7、session.getTransaction().commit();//提交事务
8、关闭session;
9、关闭sessionFactory;

Hibernate优势

  • 消除了代码的映射规则,它全部被分离到了XML或者注解里面去配置
  • 无需再管理数据库连接,它也可以配置在XML里面
  • 一个会话中,不要操作多个对象,只要操作Session对象即可
  • 关闭资源只需要关闭一个Session便可

   这就是Hibernate的优势,在配置了映射文件和数据库连接文件后,Hibernate就可以通过Session操作,非常容易,消除了jdbc带来的大量代码,大大提高了编程的简易性和可读性。

Hibernate还提供了级联,缓存,映射,一对多等功能。Hibernate是全表映射,通过HQL去操作pojo进而操作数据库的数据。

Hibernate缺陷
全表映射带来了不便,比如更新时需要发送所有的字段
无法根据不同的条件组装不同的SQL
对多表关联和复杂SQL查询支持较差,需要自己写SQL,返回后,需要自己将数据组装为POJO
不能有效支持存储过程
虽然有HQL,但是性能较差, 大型互联网系统往往需要优化SQL,而hibernate做不到

四、Mybatis

       为了解决Hibernate的不足,一个半自动映射的框架MyBatis应运而生

mybatis是一个java持久层框架,它封装少、高性能·可优化、维护简单等优点成为了目前java移动互联网网站服务的首选持久层框架,它特别适合分布式和大数据网络数据库编程

之所以称它为半自动,是因为它需要手工匹配提供POJO、SQL和映射关系,而全表映射的Hibernate只需要提供POJO和映射关系便可

 

历史
Mybaits的前身是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了 google code 并且改名为Mybatis,2013年11月迁移到Github,目前mybaits是由Github维护的

名称
iBatis一词来源于“internet”和“abatis”的组合

mybaits所需要提供的映射文件包含以下三个部分

  • SQL
  • 映射规则
  • POJO

 

 

Mybatis优点

  1. 半自动的执行方式,除sql外操作由框架完成,方便快捷
  2. 手工定制sql,实现sql与java代码分离,灵活性高,方便维护
  3. 只需要sql进行操作,不需要学习额外的内容
  4. 轻量级的框架,执行速度快

什么时候用mybaits
  hibernate只适用于场景不太复杂,要求性能不太苛刻的时候
mybatis拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存、日志、级联,但是它的缺陷是需要你提供映射规则和sql,所以它的开发工作量比Hibernate略大一些

五、 JPA

JPA 概述
JPA 的全称是 Java Persistence API, 即 Java 持久化 API,是 SUN 公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。
JPA 通过 JDK 5.0 注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

JPA 与 与 hibernate 的关系
JPA 规范本质上就是一种 ORM 规范,注意不是 ORM 框架——因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由服务厂商来提供实现。

 

  1. JPA 和 Hibernate 的关系就像 JDBC 和 JDBC 驱动的关系,JPA 是规范,Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现。
  2. JPA 怎么取代 Hibernate 呢?JDBC 规范可以驱动底层数据库吗?答案是否定的,也就是说,如果使用 JPA 规范进行数据库操作,底层需要 hibernate 作为其实现类完成数据持久化工作。

六、Spring Data JPA的概述

      Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!

Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦

1.2 Spring Data JPA的特性

          SpringData Jpa 极大简化了数据库访问层代码。 如何简化的呢? 使用了SpringDataJpa,我们的dao层中只需要写接口,就自动具有了增删改查、分页查询等方法。

1.3 Spring Data JPA 与 JPA和hibernate之间的关系

  JPA是一套规范,内部是有接口和抽象类组成的。hibernate是一套成熟的ORM框架,而且Hibernate实现了JPA规范,所以也可以称hibernate为JPA的一种实现方式,我们使用JPA的API编程,意味着站在更高的角度上看待问题(面向接口编程)

Spring Data JPA是Spring提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案。

1.4 Spring Data JPA的快速入门
https://blog.csdn.net/qq_42806915/article/details/82707783

六、各种对比/区别
Hibernate 与 mybaits 的对比
 http://www.elecfans.com/d/638827.html

jdbc,mybatis,hibernate的区别

1)从层次上看,
  • JDBC是较底层的持久层操作方式,
  • 而Hibernate和MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作。
2)从功能上看,
  • JDBC就是简单的建立数据库连接,然后创建statement,将sql语句传给statement去执行,如果是有返回结果的查询语句,会将查询结果放到ResultSet对象中,通过对ResultSet对象的遍历操作来获取数据;
  • Hibernate是将数据库中的数据表映射为持久层的Java对象,对sql语句进行修改和优化比较困难;
  • MyBatis是将sql语句中的输入参数和输出参数映射为java对象,sql修改和优化比较方便.
3)从使用上看,
  • 如果进行底层编程,而且对性能要求极高的话,应该采用JDBC的方式;
  • 如果要对数据库进行完整性控制的话建议使用Hibernate;
  • 如果要灵活使用sql语句的话建议采用MyBatis框架。

参考资料:

HIbernate和Mybatis的区别和优劣势:https://www.imooc.com/article/27839?block_id=tuijian_wz

 

通过Java经典面试题之MyBatis与Hibernate的区别深入了解MyBatis:http://baijiahao.baidu.com/s?id=1598595163822471051&wfr=spider&for=pc

 

Guess you like

Origin www.cnblogs.com/2019wxw/p/11183845.html