JDBC介绍
在JavaWeb开发中,必须要面对的一个问题就是用Java访问数据库,对此Java提供了一套API名叫JDBC(Java Database Connectivity),它是Java访问数据库的一种规范。通过使用JDBC中的接口和类,可以使Java客户端程序访问数据库,比如建立数据库连接、执行SQL语句进行数据的存取操作。
Java使用JDBC访问数据库的步骤为:
- 得到数据库驱动程序
- 创建数据库连接
- 执行SQL语句
- 得到结果集
- 对结果集做相应的处理(增,删,改,查)
- 关闭资源:这里释放的是DB中的资源
按照以上步骤,编写一个JDBC的入门程序如下:
package com.crow.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcTest {
public static void main(String[] args) throws Exception{
String url = "jdbc:mysql://localhost:3306/OrderForm";
String username = "root";
String password = "123456";
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
Connection conn = DriverManager.getConnection(url, username, password);////通过驱动管理类获取数据库链接
Statement statement = conn.createStatement();//获取用于向数据库发送sql语句的statement
String sql = "select * from user";//定义sql语句
ResultSet resultSet = statement.executeQuery(sql);//向数据库发sql,并获取结果集
while (resultSet.next()){//取出结果集的数据
System.out.println("id = " + resultSet.getObject("id"));
System.out.println("username = " + resultSet.getObject("username"));
System.out.println("birthday = " + resultSet.getObject("birthday"));
System.out.println("sex = " + resultSet.getObject("sex"));
System.out.println("address = " + resultSet.getObject("address"));
}
//释放资源
resultSet.close();
statement.close();
conn.close();
}
}
但是如果要用原生JDBC开发JavaWeb项目,则会存在很多问题:
- 数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁的开启和关闭,造成数据库的资源浪费,影响数据库的性能。
- 将SQL语句硬编码到Java代码中,如果SQL语句修改,需要重新编译Java代码,不利于系统维护。
- 向preparedStatement中设置参数,把占位符和参数硬编码在Java代码中,不利于系统维护。
- 从resultSet中遍历获取结果集数据时,对table的字段存在硬编码,不利于系统维护。
为了解决这些问题,可以提出如下设想:
- 使用数据库连接池来管理数据库的连接。
- 将SQL语句配置在XML文件中,即使SQL变化,不需要对Java代码进行重新编译。
- 将SQL语句及占位符号和参数都配置在XML配置文件中。
- 将查询的结果集自动映射为Java对象。
而MyBatis则恰好实现了这些设想。
MyBatis
MyBatis是什么
MyBatis是一个优秀的持久层的框架。 它对jdbc的操作数据库的过程进行封装,让程序主要精力放在SQL上,而不需要去处理注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。 Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成Java对象(POJO)并返回。
MyBatis框架结构
MyBatis框架原理如下图
具体流程如下:
- 配置mybatis的配置文件SqlMapConfig.xml
- 通过配置文件加载MyBatis运行环境,创建SqlSessionFactory会话工厂(使用单例模式)。
- 通过SqlSessionFactory创建SqlSession。SqlSession提供了操作数据库的各种方法(它的实现对象是线程不安全的,建议把SqlSession写在方法体内)。
- 调用SqlSession的方法去操作数据。如果需要提交事务,需要执行SqlSession的commit()方法。
- 释放资源,关闭SqlSession。