首先来看一下原生JDBC访问数据库的代码:

public static void main(String[] args) {
// 数据库连接
Connection connection = null;
// 预编译的Statement,使用预编译的Statement提高数据库的性能
PreparedStatement statement = null;
// 结果集
ResultSet resultSet = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 通过驱动管理类获取数据库的连接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
// 定义SQL语句,“?”表示占位符
String sql = "select * from emp where ename = ?";
// 获取预处理的Statement
statement = connection.prepareStatement(sql);
// 设置参数,第一个参数为SQL语句中占位符的序号(从1开始),第二个参数是设置的参数值
statement.setString(1, "smith");
// 向数据库发出SQL进行查询,查询出结果集
resultSet = statement.executeQuery();
// 遍历结果集
while (resultSet.next()) {
System.out.println(resultSet.getInt("empno") + "\t" + resultSet.getString("ename"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  使用原生JDBC访问数据库,存在以下四个问题:

  • 数据库使用时就创建,不使用就释放,即需要对数据库进行频繁的开启和关闭,造成数据库资源的浪费,影响数据库的性能。
  • 将SQL语句硬编码到JAVA代码中,如果后期SQL语句发生变化,就需要重新编译JAVA代码,不利于系统的维护。
  • PreparedStatement中传入的参数都硬编码进了JAVA代码中,不利于系统的维护。
  • 从ResultSet中遍历结果集时,将字段名都进行了硬编码,不利于系统的维护。

  针对上面的四个问题,MyBatis都对其进行了一一解决:

  • 针对上面的第一个问题,MyBatis使用了数据库连接池进行数据库管理。在SSM框架中,常用的数据库连接池有 dbcp、c3p0、druid 等,现在最常用的是 druid 。
  • 针对上面的第二个问题,MyBatis的解决方案是创建Mapper.xml文件对SQL语句进行统一的管理。
  • 针对上面的第三个问题,MyBatis的解决方案是将参数以parameterType的方式注入到Mapper.xml中的SQL语句中。
  • 针对上面的第四个问题,MyBatis的解决方案是以resultType的方式将结果自动映射成JAVA对象。

  以上是MyBatis与JAVA原生JDBC访问数据库的比较。下面介绍一下MyBatis与Hibernate之间访问数据库的比较。

(1)字段注入

  • Hibernate是SSH框架(Struts2 + Spring + Hibernate)中的一部分,我们只需要定义与数据表字段相同或基本相同的POJO,就可以在运行的时候动态的将POJO中的字段映射到数据库中,这种方式操作耗时多。
  • MyBatis是SSM框架(Spring + SpringMVC + MyBatis)中的一部分,MyBatis是将数据表映射成JAVA对象,通过输入映射、输出映射对数据表进行操作,所有数据和表结构都是从数据库中映射来的,因此MyBatis相比与Hibernate耗时较少。

(2)SQL编写

  • Hibernate不需要程序员编写SQL语句,所有的SQL语句都是自动生成的,程序员只需要调用insert、select、update、delete等方法就可以了,但这种方式对SQL优化以及一些比较复杂的SQL语句束手无策,而且如果表结构发生变化,那么Hibernate就需要重新将POJO映射到数据库,耗时很大,因此Hibernate适合那些需求变化不多的中小型项目,如后台管理系统、ERP等等。
  • MyBatis需要程序员自己编写SQL语句,这使得系统可以完全轻松的应对复杂的SQL以及SQL优化,而且由于MyBatis是从数据库映射到POJO对象,因此不需要考虑表结构变化后引起的映射耗时,适合需求变化较多的项目,如互联网项目等。

  从上面的分析来看,无论从性能、耗时,还是后期的维护角度,MyBatis相比与JDBC和Hibernate,似乎都有一定的优势,也许这就是为什么SSM现在很火的原因吧。

【JAVA - SSM】之MyBatis与原生JDBC、Hibernate访问数据库的比较的更多相关文章

  1. 使用原生JDBC方式对数据库进行操作

    使用原生JDBC方式对数据库进行操作,包括六个步骤: 1.加载JDBC驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM.可以通过java.lang.Class类的静态方法forNa ...

  2. 原生Jdbc操作Mysql数据库开发步骤

    原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤:        1.导入数据库驱动包       ...

  3. JDBC API访问数据库的基本步骤。

    JDBC本质:官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商实现这个接口,提供数据库驱动jar包. 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类. 任 ...

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

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

  5. 2017.11.12 web中JDBC 方式访问数据库的技术

    JavaWeb------ 第四章 JDBC数据库访问技术 在JavaWeb应用程序中数据库访问是通过Java数据库连接(JavaDateBase Connectivity简称JDBC)数据库的链接一 ...

  6. 原生jdbc操作mysql数据库详解

    首先给大家说一下使用JDBC链接数据库的步骤 1.加载链接数据库驱动 2.建立数据库链接 3.创建数据库操作对象 4.编写sql语句,执行sql语句 5.获取结果集 6.释放资源 我这边采用的是mav ...

  7. 1、原生jdbc连接oracle数据库简单介绍

    一.jbdc的常用API1.Connection:数据库的链接对象2.statement:数据库sql执行对象3.preparedStatment:sql的预编译处理对象,是statement子接口4 ...

  8. 《Java程序设计》第十一章 JDBC与MySQL数据库

    目录 java.sql Tips java.sql 安装导入方法见娄老师博客Intellj IDEA 简易教程 照惯例给出官方文档Package java.sql,记得熟练使用ctrl+f以及提高英语 ...

  9. Mybatis基于注解的方式访问数据库

    1. 使用方式:在Service层直接调用 package com.disappearwind.service; import org.springframework.beans.factory.an ...

随机推荐

  1. MySQL数据库的热备份和冷备份

    冷备份(off, 慢, 时间点上恢复)冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库.冷备份是将关键性文件拷贝到另外位置的一种说法.对于备份数据库信息而言,冷备份是最 ...

  2. Soy文件生成JS文件 - 一个使用Google soy模板的例子

    1.下载工具包,后解压. http://closure-templates.googlecode.com/files/closure-templates-for-javascript-latest.z ...

  3. CPU/寄存器/内存

    因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来. CPU,全名Central Processing Unit(中央处理器). ...

  4. hdu 1009 贪心算法

    博主英语不好,看懂个大概,老鼠有M磅猫食.有N个房间,每个房间前有一只猫,房间里有老鼠最喜欢的食品JavaBean,J[i].若要引开猫,必须付出相应的猫食F[i]. 当然这只老鼠没必要每次都付出所有 ...

  5. ie8下jquery读取当前点击的标签位置错误,原因是里面有内容写了text-indent:-9999px

    今天写一地图的效果,鼠标点击对应的区域,弹出所点击区域的名字. 因为设计的区域名字有特殊效果,所以,在点击区域里面套了个标签写上区域名字用来识别,但是这个文字呢不同显示在页面上,所以就给 em 加个了 ...

  6. mooc

    Coursera 课程来源 2014年前已与斯坦福.普林斯顿等近90所大学和教育机构达成合作关系. 用户类型 主要类别为学生.求职者.公司人.其中,求职者可在Coursera上获得<成就报告&g ...

  7. c++ 函数的函数声明

    c++ 函数的函数声明 只要在被调用函数的首部的末尾加一个分号,就成为对该函数的函数声明.函数声明的位置应当在函数调用之前. #include <iostream> using names ...

  8. javascript小小技巧

    JS的一些小技巧,我主要是做后台的(.NET),前端知识了解得不多,经验非常有限,不过还是经常写JS代码,对前端有着浓厚的兴趣,特喜欢js这门语言,虽然很多人喷它,但还是很喜欢Js.下面说说项目中我经 ...

  9. CT 来值班,让您安心过新年!

    春节,盼了整整一年的节日,我们一定要抛开工作,狠狠的开心,狠狠的幸福,但是作为苦逼的运维,你们真的能完全抛开工作(对网站不闻不问)吗?OneAPM CT 24 小时监控您的网站,让您无忧无虑过新年. ...

  10. draw9patch超详细教程

    这篇文章是android开发人员的必备知识,内容摘选自网络,友我为大家整理和总结,不求完美,但是有用. 视频教程地址:http://player.youku.com/player.php/sid/XM ...