1. 传统JDBC编程
假设我们有一个数据库,名为mybatis
,其中有一张为user
表,其中id
为这这张表的自增主键,如下:
创建一个Java项目,名为mybatis,导入mysql-connector-java-5.1.30-bin.jar
包:
1.1 JDBC编程
传统的JDBC编程的步骤如下:
- 加载数据库驱动
- 创建并获取数据库链接
- 设置sql语句
- 创建
jdbc statement
对象 - 设置sql语句中的参数(
preparedStatement
) - 通过
statement
执行sql并获取结果 - 对sql执行结果进行解析处理
- 释放资源
假设我们想要给user
表添加一条数据,编写程序如下:
/**
* 传统JDBC操控数据库
* @className Jdbc.java
* @author jitwxs
* @version 创建时间:2018年3月8日 下午1:35:29
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Jdbc {
public static void main(String[] args) {
try {
// 1.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.创建并获取数据库链接
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8",
"root", "root");
// 3.设置SQL语句 ?表示占位符
String sql = "select * from user where id = ?";
// 4. 创建statement对象
PreparedStatement statement = conn.prepareStatement(sql);
// 5.设置参数,第一个参数为SQL语句中参数的序号(从1开始),第二个参数为设置的参数值
statement.setInt(1, 1);
// 6.执行SQL语句,得到结果集
ResultSet resultSet = statement.executeQuery();
// 7.遍历结果
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + " " +
resultSet.getString("name") + " " + resultSet.getString("sex"));
}
// 8.关闭资源
resultSet.close();
statement.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
1.2 JDBC的缺点
- 数据库连接创建、释放频繁造成系统资源浪费,影响性能(使用数据库连接池可解决)。
- SQL语句在代码中硬编码,代码不易维护。
- 使用
PreparedStatement
向占有位符号传参数存在硬编码,不易维护。 - 对结果集解析存在硬编码,不易维护。
总结下,就是性能差、硬编码。
2. MyBatis
2.1 MyBatis相比于JDBC
- 数据库连接创建、释放频繁造成系统资源浪费,影响性能。
解决:在SqlMapConfig.xml
中配置数据连接池
,使用连接池管理数据库链接。 - SQL语句在代码中硬编码,代码不易维护。
解决:将Sql语句配置在XXXXmapper.xml
文件中与java代码分离。 - 使用PreparedStatement向占有位符号传参数存在硬编码,不易维护。
解决:Mybatis自动将java对象映射至sql语句,通过Statement
中的ParameterType
定义输入参数的类型。 - 对结果集解析存在硬编码,不易维护。
解决:Mybatis自动将SQL执行结果映射至java对象,通过Statement
中的ResultType
定义输出结果的类型。
2.2 Mybatis介绍
MyBatis
是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理繁杂的JDBC过程代码。
Mybatis
通过xml
或注解
的方式将要执行的各种statement
配置起来,并通过java对象和statement
中的sql进行映射生成最终执行的SQL语句,最后由Mybatis框架执行SQL并将结果映射成java对象并返回。
(1)SqlMapConfig.xml
Mybatis的全局配置文件,配置了Mybatis的运行环境等信息。
(2)Mapper.xml
SQL映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapConfig.xml中加载。
(3)SqlSessionFactory
通过Mybatis环境等配置信息构造SqlSessionFactory即会话工厂
(4)SqlSession
由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
(5)Executor
Mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
(6)MappedStatement
MappedStatement也是Mybatis一个底层封装对象,它包装了Mybatis配置信息及SQL映射信息等。Mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是Mappedstatement的id。
(7)输入映射
MappedStatement对SQL执行输入参数进行定义,包括HashMap、基本类型、POJO,Executor通过MappedStatement在执行SQL前将输入的java对象映射至SQL中,输入参数映射就是JDBC编程中对preparedStatement设置参数。
(8)输出映射
MappedStatement对SQL执行输出结果进行定义,包括HashMap、基本类型、POJO,Executor通过MappedStatement在执行SQL后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
2.3 Mybatis下载
Mybatis下载地址:点击下载
下载后解压如下:
Tables | Are |
---|---|
名称 | 含义 |
lib | 依赖包 |
src | 源码 |
mybatis-3.4.4.jar | 核心包 |