前言:为什么在学mybatis之前要先了解JDBC呢?因为mybatis是以ORM模型为中心思想的框架,而所有的ORM模型都是基于JDBC进行封装的,不同的ORM模型对JDBC封装的强度是不一样的。


JDBC

  相信有一部分读者是通过JDBC连接数据库的,但是JDBC之定义了接口规范,具体实现是交由给各个数据库厂商实现的,因为每个数据库都有其特殊性,这些是Java规范没有办法确定的,所以JDBC是一种典型的桥接模式(桥接模式,简单地说就是,将抽象部分与它的实现部分分离开来,将继承关系转化成关联关系,降低类与类之间的耦合度,减少系统中的类的代码,使他们都可以独立变化,具体可以看https://www.cnblogs.com/chenssy/p/3317866.html )。

  JDBC基本连接类:

 public class JdbcExample{private Connection getConnection(){Connection connection = null;  //初始化Connectiontry{Class.forName("com.mysql.Driver");  //注册驱动
String url = "jdbc:mysql://localhost:3306/mybatis";String user="root";String password="";connection = DriverManager.getConnection(url,user,password);  //注册数据库信息
}catch(ClassNotFoundException|SQLException ex){Logger.getConnection(JdbcExample.class.getName()).log(Level.SEVERE,null,ex);return null;}return connection;}

  JDBC实现类:

public User getUser(int id){Connection connection = getConnection();  //获取连接信息PreparedStatement ps = null;  //操作数据库
ResultSet rs = null;  //接收返回的结果try{ps = connection.prepareStatement("select id, userName from user_info where id =?");  ps.setInt(1,id);rs = ps.executeQuery();while(rs.next()){int roleId = rs.getInt("id");String userName = rs.getString("userName"); User user = new User(id,userName);return user;}}catch(SQLException ex){Logger.getConnection(JdbcExample.class.getName()).log(Level.SEVERE,null,ex);}finally{this.close(rs,ps,connection);}return null;}  //关闭数据库的连接 private void close(ResultSet rs, Statement stmt, Connection connection){try{if(rs!=null&&!rs.isClosed()){rs.close();}}catch(SQLException ex){Logger.getConnection(JdbcExample.class.getName()).log(Level.SEVERE,null,ex);}try{if(stmt!=null&&!stmt.isClosed()){stmt.close();}}catch(SQLException ex){Logger.getConnection(JdbcExample.class.getName()).log(Level.SEVERE,null,ex);}try{if(connection!=null&&!connection.isClosed()){connection.close();}}catch(SQLException ex){Logger.getConnection(JdbcExample.class.getName()).log(Level.SEVERE,null,ex);}}  //测试public static void main(String[] args){JdbcExample example = new JdbcExample();User user = example.getUser(1);System.err.println("userName=>+"+user.getName());}

}

从代码中我们可以看出,整个过程大致分为几部分:

1、 使用JDBC编程连接数据库,注册驱动和数据库信息。

2、 操作Connection以打开Statement对象。

3、 通过Statementzhixing SQL,将结果返回到ResultSet对象。

4、 使用ResultSet读取数据库信息,然后通过代码转换为具体的POJO对象。

5、 关闭数据库相关资源。

JDBC虽然比ODBC(用C语言实现可关联数据库工具)的平台独立性要好,但是它还是存在一些弊端。其一,工作量相对较大。我们需要先连接,然后处理JDBC底层事务,处理数据类型。我们还需要操作Connection对象、Statement对象和ResultSet对象去拿到数据。其二,我们要对JDBC编程可能产生的异常进行捕捉处理并正确关闭资源。

转载于:https://www.cnblogs.com/NYfor2018/p/9088254.html

(一)mybatis之JDBC介绍相关推荐

  1. Mybatis 拦截器介绍

    Mybatis 拦截器介绍 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 拦截器的一个作用就是我们 ...

  2. Mybatis与JDBC的对比超详细笔记

    1      Mybatis入门 1.1    单独使用jdbc编程问题总结 1.1.1  jdbc程序 Public static void main(String[] args) { Connec ...

  3. 《转载》Mybatis 拦截器介绍

    Mybatis 拦截器介绍 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 1.2 拦截器的一个作用 ...

  4. MyBatis超详细介绍——SQL语句构建器类

    MyBatis超详细介绍--SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String sele ...

  5. 后端:MyBatis缓存知识介绍

    今天给大家分享一下MyBatis缓存知识介绍,希望对大家日常的开发当中能有所帮助! 一.MyBatis一级缓存 1.一级缓存介绍 当我们的程序MyBatis开启一次和数据库的会话,MyBatis会自动 ...

  6. Mybatis解决jdbc编程的问题以及mybatis与hibernate的不同

    Mybatis解决jdbc编程的问题: 1. 数据库连接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题. 解决:在SqlMapConfig.xml中配置数据连接池,使 ...

  7. Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案

    Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 参考文章: (1)Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 (2)https://www.cnblogs. ...

  8. 转:Mybatis与JDBC批量插入数据库哪个更快

    转自 http://www.cnblogs.com/fnz0/p/5713102.html, https://www.cnblogs.com/wxw7blog/p/8706797.html [转]: ...

  9. MyBatis对比JDBC的优点

    MyBatis对比JDBC的优点 MyBatis是我们常用的一个框架,使用这个框架我们大大的简化了JDBC让工作人员注重于SQL语句的编写,而JDBC的其他步骤可以交给框架来完成.我们对比下使用MyB ...

最新文章

  1. RemoveError: 'setuptools' is a dependency of conda and cannot be removed from
  2. 线程与进程的一些应用
  3. Maven的maven-clean-plugin插件详解
  4. 2-zookeeper、ha
  5. C 标准库—— stdlib.h(包括 rand srand 的实现)
  6. 人口会一直增长下去吗_想要一直美下去?护肤雷区你避开了吗?
  7. 古风素材无水印免费下载
  8. 易筋SpringBoot 2.1 | 第十八篇:SpringBoot的JDBC异常
  9. C/C++遍历目录下的所有文件(Windows篇)
  10. 作为一个Java开发者,java常用算法手册pdf
  11. 《笨方法学PYTHON》——eighteenthlesson
  12. 基于stm32单片机智能交通灯设计Proteus仿真
  13. .net 开源混淆器 ConfuserEx
  14. C语言——基础链表详解
  15. 洛谷P1007独木桥
  16. BeagleBone Black 从零到一 (2 MLO、U-Boot)_spl
  17. python中heapq的库是什么_详解Python中heapq模块的用法
  18. Python轻松搞定免费语音合成,利用百度AI为短视频配音
  19. 关于拖延症的一些小思考
  20. Excel的检验数据的标准(数据验证-数据的有效性)

热门文章

  1. Linux(Ubuntu)使用日记------自定义命令的使用
  2. 各大牛逼讲师的经典Jquery精品视频教程,大放送啦!!!(包括手机移动端JqueryWeb开发)!!!...
  3. Python从2.6升级到2.7,使用pip安装module,报错:No Module named pip.log(转载)
  4. python---之hasattr()
  5. CV学习笔记-图像滤波器
  6. 视觉slam学习笔记以及课后习题《第五讲特征点法视觉里程计》
  7. 【学习OpenCV4】如何操作图像中的像素?
  8. Realsense无法启动彩色摄像头
  9. linux下多版本opencv共存问题
  10. java8 collections_关于Jdk7与Jdk8对Collections进行分组的区别