在学习使用mybatis之前,先比较下jdbc编程和hibernate编程各自的优缺点。

JDBC:

我们平时使用jdbc进行编程,大致需要下面几个步骤:

1,使用jdbc编程需要连接数据库,注册驱动和数据库信息

2,操作Connection,打开Statement对象

3,通过Statement对象执行SQL,返回结果到ResultSet对象

4,使用ResultSet读取数据,然后通过代码转化为具体的POJO对象

5,关闭数据库相关的资源

jdbc的缺点:

一:工作量比较大,需要连接,然后处理jdbc底层事务,处理数据类型,还需要操作Connection,Statement对象和ResultSet对象去拿数据并关闭他们。

二:我们对jdbc编程可能产生的异常进行捕捉处理并正确关闭资源

由于JDBC存在的缺陷,在实际工作中我们很少直接使用jdbc进行编程,用的更多的是ORM对象关系模型来操作数据库,Hibernate就是一个ORM模型

Hibernate:

Hibernate是建立在若干POJO通过xml映射文件(或注解)提供的规则映射到数据库表上的。我们可以通过POJO直接操作数据库的数据,他提供的是一种全表映射的模型。相对而言,Hibernate对JDBC的封装程度还是比较高的,我们已经不需要写SQL,只要使用HQL语言就可以了。

使用Hibernate进行变成有以下好处:

1,消除了代码的映射规则,它全部分离到了xml或者注解里面去配置。

2,无需在管理数据库连接,它也配置到xml里面了。

3,一个回话中不需要操作多个对象,只需要操作Session对象。

4,关闭资源只需要关闭一个Session便可。

这就是Hibernate的优势,在配置了映射文件和数据库连接文件后,Hibernate就可以通过Session操作,非常容易,消除了jdbc带来的大量代码,大大提高了编程的简易性和可读性。Hibernate还提供了级联,缓存,映射,一对多等功能。Hibernate是全表映射,通过HQL去操作pojo进而操作数据库的数据。

Hibernate的缺点:

1,全表映射带来的不便,比如更新时需要发送所有的字段。

2,无法根据不同的条件组装不同的SQL。

3,对多表关联和复杂的sql查询支持较差,需要自己写sql,返回后,需要自己将数据封装为pojo。

4,不能有效的支持存储过程。

5,虽然有HQL,但是性能较差,大型互联网系统往往需要优化sql,而hibernate做不到。

Mybatis:

为了解决Hibernate的不足,Mybatis出现了,Mybatis是要给半自动的框架。之所以称它为半自动,是因为它需要手工匹配提供POJO,sql和映射关系,而全表映射的Hibernate只需要提供pojo和映射关系即可。

Mybatis需要提供的映射文件包含了一下三个部分:sql,映射规则,pojo。在Mybatis里面你需要自己编写sql,虽然比Hibernate配置多,但是Mybatis可以配置动态sql,解决了hibernate表名根据时间变化,不同条件下列不一样的问题,同时你也可以对sql进行优化,通过配置决定你的sql映射规则,也能支持存储过程,所以对于一些复杂和需要优化性能的sql查询它就更加方便。Mybatis几乎可以做到jdbc所有能做到的事情。

什么时候使用Hibernate,Mybatis

Hibernate作为留下的java orm框架,它确实变成简易,需要我们提供映射的规则,完全可以通过IDE生成,同时无需编写sql确实开发效率优于Mybatis。此外Hibernate还提供了缓存,日志,级联等强大的功能,但是Hibernate的缺陷也是十分明显,多表关联复杂sql,数据系统权限限制,根据条件变化的sql,存储过程等场景使用Hibernate十分不方便,而性能又难以通过sql优化,所以注定了Hibernate只适用于在场景不太复杂,要求性能不太苛刻的时候使用。

如果你需要一个灵活的,可以动态生成映射关系的框架,那么Mybatis确实是一个最好的选择。它几乎可以替代jdbc,拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存,日志,级联。但是它的缺陷是需要你提供映射规则和sql,所以开发工作量比hibernate要大些。

JDBC和hibernate,mybatis的比较的更多相关文章

  1. 【JAVA - SSM】之MyBatis与原生JDBC、Hibernate访问数据库的比较

    首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...

  2. 从JDBC到hibernate再到mybatis之路

    一.传统的JDBC编程 在java开发中,以前都是通过JDBC(Java Data Base Connectivity)与数据库打交道的,至少在ORM(Object Relational Mappin ...

  3. jdbc hibernate myBatis比较

    jdbc hibernate myBatis比较 jdbc 优点:性能高,易掌握 缺点:代码繁琐 hibernate 优点:不用写sql,代码简洁 缺点:性能不好 自动生成的sql效率低下(复杂业务) ...

  4. jpa,jdbc,hibernate/mybatis,数据库驱动

    JPA是规范,hibernate/mybatis是对规范的实现,hibernate/mybatis是对jdbc的封装,也就是说hibernate/mybatis还是会调用jdbc.    我们平时使用 ...

  5. 【JavaEE】之MyBatis与原生JDBC、Hibernate访问数据库的比较

    首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...

  6. 存储层技术:JDBC、Hibernate、Mybatis三者之间的比较学习

    JDBC     Hibernate Mybatis    (Java  DataBase Connnection) 是通过JAVA访问数据库 对JDBC的轻量封装 像操作对象操作数据库 对SQL的轻 ...

  7. JDBC、Hibernate、Mybaites处理数据的流程及对DAO的理解

    以查询一个用户信息(id,name)为例: JDBC 1. 获取一个connection 2. 生成一个statement 3. 拼接SQL语句 4. 查询对象,获取结果集(假设已经找到我们需要的对象 ...

  8. jdbc 和 hibernate 比较

    相同点:都是数据库操作的中间件,都不是线程安全需要即时关闭,都可以对数据库操作进行显式处理. 不同:jdbc使用标准sql语言,hibernate使用HQL,操作对象jdbc直接操作数据传送到数据库, ...

  9. JDBC与Hibernate的区别

    相同点: ◆两者都是JAVA的数据库操作中间件. ◆两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭. ◆两者都可以对数据库的更新操作进行显式的事务处理. 不同点: ◆使用的SQL语言 ...

  10. 详解JDBC与Hibernate区别

    详解JDBC与Hibernate区别 引用地址:http://www.cnblogs.com/JemBai/archive/2011/04/13/2014940.html 刚开始学习JAVA时,认为H ...

随机推荐

  1. 解决java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone

    使用spring boot整合MySQL时一直报 java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecog ...

  2. 实现调用Android手机的拍照功能

    很简单,直接上示例吧 1 xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  3. 关于H5页面在iPhoneX适配(转)

    ​1.  iPhoneX的介绍 屏幕尺寸 我们熟知的iPhone系列开发尺寸概要如下: △ iPhone各机型的开发尺寸 转化成我们熟知的像素尺寸: △ 每个机型的多维度尺寸 倍图其实就是像素尺寸和开 ...

  4. 在数组中寻找和为定值的n个数

    /*-------------------------------------------------------*/ /*寻找和为定值的两个数 输入一个数组A[0,N-1]和一个数字Sum,在数组中 ...

  5. 02Modify.ashx(修改班级信息)

    02Modify.html 修改 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> & ...

  6. python爬虫之真实世界中的网页解析

    Request和Response Request是我们平常浏览网页,向网站所在的服务器发起请求,而服务器收到请求后,返回给我们的回应就是Response,这种行为就称为HTTP协议,也就是客户端(浏览 ...

  7. HDU - 6231 K-th Number (2017CCPC哈尔滨站 二分+尺取法)

    Alice are given an array A[1..N] with N numbers. Now Alice want to build an array B by a parameter K ...

  8. 实际体验 .NET Standard 2.0 的魅力

    在我们的 .net core 大迁移工程中,有些项目完成了迁移,有些还未迁移,这就带来了一个烦恼——我们自己开发的公用类库如何在 .net core 与 .net framework 项目中共享?如果 ...

  9. {MySQL完整性约束}一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业

    MySQL完整性约束 阅读目录 一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业 一 ...

  10. Oracle 变量之 DDL_LOCK_TIMEOUT

    DDL_LOCK_TIMEOUTProperty DescriptionParameter type IntegerDefault value 0Modifiable ALTER SESSIONRan ...