(一)mybatis之JDBC介绍
前言:为什么在学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介绍相关推荐
- Mybatis 拦截器介绍
Mybatis 拦截器介绍 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 拦截器的一个作用就是我们 ...
- Mybatis与JDBC的对比超详细笔记
1 Mybatis入门 1.1 单独使用jdbc编程问题总结 1.1.1 jdbc程序 Public static void main(String[] args) { Connec ...
- 《转载》Mybatis 拦截器介绍
Mybatis 拦截器介绍 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 1.2 拦截器的一个作用 ...
- MyBatis超详细介绍——SQL语句构建器类
MyBatis超详细介绍--SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String sele ...
- 后端:MyBatis缓存知识介绍
今天给大家分享一下MyBatis缓存知识介绍,希望对大家日常的开发当中能有所帮助! 一.MyBatis一级缓存 1.一级缓存介绍 当我们的程序MyBatis开启一次和数据库的会话,MyBatis会自动 ...
- Mybatis解决jdbc编程的问题以及mybatis与hibernate的不同
Mybatis解决jdbc编程的问题: 1. 数据库连接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题. 解决:在SqlMapConfig.xml中配置数据连接池,使 ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 参考文章: (1)Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 (2)https://www.cnblogs. ...
- 转:Mybatis与JDBC批量插入数据库哪个更快
转自 http://www.cnblogs.com/fnz0/p/5713102.html, https://www.cnblogs.com/wxw7blog/p/8706797.html [转]: ...
- MyBatis对比JDBC的优点
MyBatis对比JDBC的优点 MyBatis是我们常用的一个框架,使用这个框架我们大大的简化了JDBC让工作人员注重于SQL语句的编写,而JDBC的其他步骤可以交给框架来完成.我们对比下使用MyB ...
最新文章
- RemoveError: 'setuptools' is a dependency of conda and cannot be removed from
- 线程与进程的一些应用
- Maven的maven-clean-plugin插件详解
- 2-zookeeper、ha
- C 标准库—— stdlib.h(包括 rand srand 的实现)
- 人口会一直增长下去吗_想要一直美下去?护肤雷区你避开了吗?
- 古风素材无水印免费下载
- 易筋SpringBoot 2.1 | 第十八篇:SpringBoot的JDBC异常
- C/C++遍历目录下的所有文件(Windows篇)
- 作为一个Java开发者,java常用算法手册pdf
- 《笨方法学PYTHON》——eighteenthlesson
- 基于stm32单片机智能交通灯设计Proteus仿真
- .net 开源混淆器 ConfuserEx
- C语言——基础链表详解
- 洛谷P1007独木桥
- BeagleBone Black 从零到一 (2 MLO、U-Boot)_spl
- python中heapq的库是什么_详解Python中heapq模块的用法
- Python轻松搞定免费语音合成,利用百度AI为短视频配音
- 关于拖延症的一些小思考
- Excel的检验数据的标准(数据验证-数据的有效性)
热门文章
- Linux(Ubuntu)使用日记------自定义命令的使用
- 各大牛逼讲师的经典Jquery精品视频教程,大放送啦!!!(包括手机移动端JqueryWeb开发)!!!...
- Python从2.6升级到2.7,使用pip安装module,报错:No Module named pip.log(转载)
- python---之hasattr()
- CV学习笔记-图像滤波器
- 视觉slam学习笔记以及课后习题《第五讲特征点法视觉里程计》
- 【学习OpenCV4】如何操作图像中的像素?
- Realsense无法启动彩色摄像头
- linux下多版本opencv共存问题
- java8 collections_关于Jdk7与Jdk8对Collections进行分组的区别