传统JDBC与Mybatis介绍

1. 传统JDBC编程

假设我们有一个数据库,名为mybatis,其中有一张为user表,其中id为这这张表的自增主键,如下:
传统JDBC与Mybatis介绍_第1张图片

创建一个Java项目,名为mybatis,导入mysql-connector-java-5.1.30-bin.jar包:
传统JDBC与Mybatis介绍_第2张图片

1.1 JDBC编程

传统的JDBC编程的步骤如下:

  1. 加载数据库驱动
  2. 创建并获取数据库链接
  3. 设置sql语句
  4. 创建jdbc statement对象
  5. 设置sql语句中的参数(preparedStatement)
  6. 通过statement执行sql并获取结果
  7. 对sql执行结果进行解析处理
  8. 释放资源

假设我们想要给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();
		}
	}
}

传统JDBC与Mybatis介绍_第3张图片

1.2 JDBC的缺点

  1. 数据库连接创建、释放频繁造成系统资源浪费,影响性能(使用数据库连接池可解决)。
  2. SQL语句在代码中硬编码代码不易维护
  3. 使用PreparedStatement向占有位符号传参数存在硬编码不易维护
  4. 对结果集解析存在硬编码不易维护

总结下,就是性能差硬编码

2. MyBatis

2.1 MyBatis相比于JDBC

  1. 数据库连接创建、释放频繁造成系统资源浪费,影响性能。
    解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
  2. SQL语句在代码中硬编码,代码不易维护。
    解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离
  3. 使用PreparedStatement向占有位符号传参数存在硬编码,不易维护。
    解决:Mybatis自动将java对象映射至sql语句,通过Statement中的ParameterType定义输入参数的类型。
  4. 对结果集解析存在硬编码,不易维护。
    解决:Mybatis自动将SQL执行结果映射至java对象,通过Statement中的ResultType定义输出结果的类型。

2.2 Mybatis介绍

MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理繁杂的JDBC过程代码。

Mybatis通过xml注解的方式将要执行的各种statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的SQL语句,最后由Mybatis框架执行SQL并将结果映射成java对象并返回

传统JDBC与Mybatis介绍_第4张图片

(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下载地址:点击下载

下载后解压如下:
传统JDBC与Mybatis介绍_第5张图片

Tables Are
名称 含义
lib 依赖包
src 源码
mybatis-3.4.4.jar 核心包

你可能感兴趣的:(#,Java,Web)