(一)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; //初始化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介绍的更多相关文章
- jdbc、Mybatis、Hibernate介绍(非原创)
文章大纲 一.jdbc介绍二.Mybatis介绍三.Hibernate介绍四.jdbc.Mybatis.Hibernate比较五.参考文章 一.jdbc介绍 1. jdbc编程步骤 (1)加载数据 ...
- MyBatis注解Annotation介绍及Demo
MyBatis注解Annotation介绍及Demo 2014-04-21 17:09:55 标签:Mybatis Annotation 注解 ResultMap SqlBuilder 原创作品,允 ...
- JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- Mybatis通用Mapper介绍和使用
Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL. ...
- Mybatis解决jdbc编程的问题
1.1.1 Mybatis解决jdbc编程的问题 1. 数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig.xml中配置 ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- MyBatis、JDBC相关知识
引言 在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹.但是,为什么还要要学习mybatis的工作原理?因为,随着mybatis框架的不断发展,如今已经越来越趋于自动化,从代 ...
- 一、mybatis的插件介绍
摘自:https://www.cnblogs.com/qm-article/p/11785350.html mybatis的插件机制 一.mybatis的插件介绍 关于mybatis的插件,我想大 ...
- JDBC(1):JDBC介绍
一,JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加 ...
随机推荐
- 安装vs2010,vs2015后,删除2015,导致vs2016打不开
报错:Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(M ...
- background属性
background: url(images/01.jpg) 0 10px; 效果: background: url(images/01.jpg) 0 -10px; 效果: *注释:10px 是网上去 ...
- 3.SpringMVC修改配置文件路径和给界面传递数据
1.修改配置文件路径 达到 配置多文件的目的 web.xml文件中基础配置有springMVC配置的servlet路径 <servlet-name>SpringMVC</serv ...
- Mathematics:Prime Path(POJ 3126)
素数通道 题目大意:给定两个素数a,b,要你找到一种变换,使得每次变换都是素数,如果能从a变换到b,则输出最小步数,否则输出Impossible 水题,因为要求最小步数,所以我们只需要找到到每个素数的 ...
- nginx 配置轮询服务
通常我们应用nginx做代理时,用到它的轮训服务 #设置轮询名称 upstream zyy{ server 127.0.0.1:8080 #本机的apache服务 } server { listen ...
- Linux安装php的Redis扩展
1.安装redis 下载:https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz 上传phpredis-2.2.4.tar.gz到/usr ...
- WSDL/WebService/SOAP/REST/AXIS/CXF 开放式服务
WebService是一种数据交换标准.通过WebService标准,你可以把项目中的方法作为接口提供给其他项目使用. 有时候我们习惯性地将具体提供服务的某个方法称为WebService.比如图书系统 ...
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis ...
- Swift_语法的熟悉
Swift_语法的熟悉 oc与swift区变 文件区别oc有实现文件以及声明文件等,在swift中实现机声明类似文件总归结一个即可 1. 常量与变量的初始化 常量 关键字"let" ...
- Django和Angular.js模板标签冲突的解决方式
参考文章:http://yanhua365.lofter.com/post/b417f_1f0361 http://stackoverflow.com/questions/8302928/angula ...