mybatis学习笔记(1)-mybatis概述

JDBC介绍

在JavaWeb开发中,必须要面对的一个问题就是用Java访问数据库,对此Java提供了一套API名叫JDBC(Java Database Connectivity),它是Java访问数据库的一种规范。通过使用JDBC中的接口和类,可以使Java客户端程序访问数据库,比如建立数据库连接、执行SQL语句进行数据的存取操作。

Java使用JDBC访问数据库的步骤为:

  1. 得到数据库驱动程序
  2. 创建数据库连接
  3. 执行SQL语句
  4. 得到结果集
  5. 对结果集做相应的处理(增,删,改,查)
  6. 关闭资源:这里释放的是DB中的资源

按照以上步骤,编写一个JDBC的入门程序如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/** * Created by CrowHawk on 17/3/15. */
public class JdbcTest {
    public static void main(String[] args) throws Exception{
        String url = "jdbc:mysql://localhost:3306/OrderForm";
        String username = "root";
        String password = "wyj";
        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项目,则会存在很多问题:

  1. 数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁的开启和关闭,造成数据库的资源浪费,影响数据库的性能。
  2. 将SQL语句硬编码到Java代码中,如果SQL语句修改,需要重新编译Java代码,不利于系统维护。
  3. 向preparedStatement中设置参数,把占位符和参数硬编码在Java代码中,不利于系统维护。
  4. 从resultSet中遍历获取结果集数据时,对table的字段存在硬编码,不利于系统维护。

为了解决这些问题,可以提出如下设想:

  1. 使用数据库连接池来管理数据库的连接。
  2. 将SQL语句配置在XML文件中,即使SQL变化,不需要对Java代码进行重新编译。
  3. 将SQL语句及占位符号和参数都配置在XML配置文件中。
  4. 将查询的结果集自动映射为Java对象。

而MyBatis则恰好实现了这些设想。

Mybatis

Mybatis是什么

MyBatis 本是 apache 的一个开源项目 iBatis , 2010年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及对结果集的检索封装。MyBatis 可以对配置和原生 Map 使用简单的 XML 或注解,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

MyBatis 的主要思想是将程序中的大量 SQL 语句抽取出来,配置在配置文件中,以实现 SQL 的灵活配置。

MyBatis 并不完全是一种 ORM 框架,它的设计思想和 ORM 相似,只是它允许直接编写 SQL 语句,使得数据库访问更加灵活。因此,准确地说,MyBatis 提供了一种“半自动化”的 ORM 实现,是一种 “SQL Mapping” 框架。

功能架构

Mybatis的功能架构分为三层:
这里写图片描述

扫描二维码关注公众号,回复: 1875749 查看本文章
  • API接口层:提供给外部使用的接口 API,开发人员通过这些本地 API
    来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
  • 数据处理层:负责具体的 SQL 查找、SQL 解析、SQL 执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  • 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件,为上层的数据处理层提供最基础的支撑。

框架结构

这里写图片描述

具体流程如下:

  1. 配置mybatis的配置文件SqlMapConfig.xml
  2. 通过配置文件加载MyBatis运行环境,创建SqlSessionFactory会话工厂(使用单例模式)。
  3. 通过SqlSessionFactory创建SqlSession。SqlSession提供了操作数据库的各种方法(它的实现对象是线程不安全的,建议把SqlSession写在方法体内)。
  4. 调用SqlSession的方法去操作数据。如果需要提交事务,需要执行SqlSession的commit()方法。
  5. 释放资源,关闭SqlSession。

猜你喜欢

转载自blog.csdn.net/lin74love/article/details/80910260