前言:为什么在学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;  //初始化Connection

        try{

            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编程可能产生的异常进行捕捉处理并正确关闭资源。

(一)mybatis之JDBC介绍的更多相关文章

  1. jdbc、Mybatis、Hibernate介绍(非原创)

    文章大纲 一.jdbc介绍二.Mybatis介绍三.Hibernate介绍四.jdbc.Mybatis.Hibernate比较五.参考文章   一.jdbc介绍 1. jdbc编程步骤 (1)加载数据 ...

  2. MyBatis注解Annotation介绍及Demo

     MyBatis注解Annotation介绍及Demo 2014-04-21 17:09:55 标签:Mybatis Annotation 注解 ResultMap SqlBuilder 原创作品,允 ...

  3. JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  4. Mybatis通用Mapper介绍和使用

    Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL. ...

  5. Mybatis解决jdbc编程的问题

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

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

    转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1      背景 系统中需要批量生成单据数据到数据库表,所以采用 ...

  7. MyBatis、JDBC相关知识

    引言 在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹.但是,为什么还要要学习mybatis的工作原理?因为,随着mybatis框架的不断发展,如今已经越来越趋于自动化,从代 ...

  8. 一、mybatis的插件介绍

    摘自:https://www.cnblogs.com/qm-article/p/11785350.html mybatis的插件机制   一.mybatis的插件介绍 关于mybatis的插件,我想大 ...

  9. JDBC(1):JDBC介绍

    一,JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加 ...

随机推荐

  1. css一些不为人所熟知的知识点

    1.设置a标签内字体水平居中:text-algin:center 2.设置a标签内字体水平居中:line-height:height 3.如何设置td宽度固定<table style=" ...

  2. studio 集成 Genymotion后打开模拟器出错、打开虚拟机VirtualBox出错

    好吧,首先给出错误类型如下: “Unable to load R3 module D:\Program Files\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastErr ...

  3. C#基础之--线程、任务和同步:一、异步委托

    创建线程的一种简单方式是定义一个委托,并异步调用它.委托是方法的类型安全的引用. Delegate还支持异步地调用方法.在后台Delegate类会创建一个执行任务的线程. 为了说明委托的异步特性,从一 ...

  4. IsPostBack深入探讨

    1IsPostBack介绍 IsPostBack是Page类有一个bool类型的属性,用来判断针对当前Form的请求是第一次还是非第一次请求.当IsPostBack=true时表示非第一次请求,我们称 ...

  5. git如何做个人构建

    1      基本概念 1.1      Git:Git是一个版本控制的工具,类似于svn. 1.2      Gerrit:Gerrit是一个基于git的团队合作的工具,开发人员可以往上面提交代码, ...

  6. MySQL(12)---纪录一次left join一对多关系而引起的BUG

    MySQL(11)---纪录一次left join一对多关系而引起的bug BUG背景 我们有一个订单表 和 一个 物流表 它们通过 订单ID 进行一对一的关系绑定.但是由于物流表在保存订单信息的时候 ...

  7. tp5 验证器使用

    路径 app\admin\validate\User.php 如果没有则创建该文件夹和文件 User.php <?php namespace app\junyi\validate; use th ...

  8. 安装CocoaPods,ios的库安装工具

    1.需要ruby环境,mac pro自带了 2.终端输入:sudo gem install cocoapods

  9. freertos之队列

    任务间信息的传递是通过队列来实现的(单个值.结构体.共享数据指针.),队列是个独立的内核对象,即不属于任何一个任务,每个任务都可以向队列中发送数据和从队列中读数据.对于数据量小的场合通常队列是通过字节 ...

  10. axios delete 请求

    axios delete 请求 在传递一个参数的时候,直接把参数放在请求连接后面,用'/' 连接就可以了 this.axios.post(this.APIURL+'/'+ID) //http://ww ...