(一)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加 ...
随机推荐
- ubuntu系统下挂载新的硬盘
参考 http://zwkufo.blog.163.com/blog/static/258825120141283942244/ http://blog.csdn.net/caicai2526 ...
- CF-807A
A. Is it rated? time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- jquery 快速入门二
---恢复内容开始--- 操作标签 样式操作 样式类 addClass();//添加指定的CSS类名. removeClass();//移除指定的类名. hasClass();//判断样式不存在 to ...
- 洛谷 - P1414 - 又是毕业季II - 因数
https://www.luogu.org/problemnew/show/P1414 以后这种gcd的还是尽可能往分解那里想一下. 先把每个数分解,他的所有因子都会cnt+1. 然后从最大的可能因子 ...
- numpy.ndarray常用属性和方法
import numpy as np a = np.array([[1,2,3],[4,3,2],[6,3,5]])print(a) [[1 2 3] [4 3 2] [6 3 5]] print(a ...
- 138. Copy List with Random Pointer (not do it by myself)
A linked list is given such that each node contains an additional random pointer which could point t ...
- SPOJ PHT【二分】+SPOJ INUM【最小/大值重复】
BC 两道其实都是水 没有完整地想好直接就码出事情.wa了一次以后要找bug,找完要把思路理的非常清楚 SPOJ PHT[二分] #include<bits/stdc++.h> using ...
- Codeforces325 D【并查集维护连通性】
参考:大牛blog 思路: 因为是环,所以可以复制一下图,先判断一下和他是不是和与他相邻的8个之一的一个障碍使得构成了一个环,环就是一个连通,用并查集维护即可: 如果没有就ans++,然后并把这个点加 ...
- Unity json
MiniJSON.cs using UnityEngine; using System; using System.Collections; using System.Collections.Gene ...
- 51nod1267(双指针)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 题意:中文题诶- 思路:双指针 求a+b+c+d=0,令 ...