第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

MyBatis 簡單使用

1. 前言

上一節(jié)中,我們搭建了 MyBatis 實驗環(huán)境。本小節(jié),我們將一起學習如何使用 MyBatis,雖然在實際的開發(fā)中,你幾乎不會按照本小節(jié)所介紹的方式去使用 MyBatis,但是這對你熟悉 MyBatis 整體結(jié)構(gòu)有著重要作用,同時這也是面試的重點。

2. 編程式使用

MyBatis 官方文檔中并未詳細的介紹如何編程式使用 MyBatis,絕大多數(shù)情況下,我們都是通過 配置文件來拿到配置然后開啟會話的。這樣的方式固然很方便,但是卻屏蔽了太多的細節(jié),因此我們想從點到面,層層遞進給你介紹 MyBatis 的基礎(chǔ)用法。

接下來,我們一起來寫一個簡單的 demo 來使用一下 MyBatis。

2.1 啟動 MyBatis

在 mybatis-primer 項目中,有一個默認的包com.imooc.mybatis,在該包下,我們新建一個包名為pattern,并在其中新建一個名為StartNoXml.java的類,并向該文件中填充如下代碼:

package com.imooc.mybatis.pattern;

import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@SuppressWarnings({"SqlResolve", "SqlNoDataSourceInspection", "Duplicates"})
public class StartNoXml {
  public static void main(String[] args) throws SQLException {
    // 無需xml配置的方式使用MyBatis
    // 準備jdbc事務(wù)類
    JdbcTransactionFactory jdbcTransactionFactory = new JdbcTransactionFactory();
    // 配置數(shù)據(jù)源
    PooledDataSource dataSource =
      new PooledDataSource("com.mysql.cj.jdbc.Driver",
        "jdbc:mysql://localhost:3306/imooc?useSSL=false",
        "root", "123456");
    // 配置環(huán)境,向環(huán)境中指定環(huán)境id、事務(wù)和數(shù)據(jù)源
    Environment environment = new Environment.Builder("development")
      .transactionFactory(jdbcTransactionFactory)
      .dataSource(dataSource).build();
    // 新建 MyBatis 配置類
    Configuration configuration = new Configuration(environment);
    // 得到 SqlSessionFactory 核心類
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
    // 開始一個 sql 會話
    SqlSession session = sqlSessionFactory.openSession();
    // 得到 sql 連接并運行 sql 語句
    PreparedStatement preStatement = session
      .getConnection()
      .prepareStatement("SELECT * FROM imooc_user WHERE id = ?");
    preStatement.setInt(1, 1);
    ResultSet result = preStatement.executeQuery();
    // 驗證結(jié)果
    while (result.next()) {
      System.out.println("username: " + result.getString("username"));
    }
    // 關(guān)閉會話
    session.close();
  }
}

即使你不熟悉 MyBatis,也沒有必要被這段代碼給嚇到,因為在實際的開發(fā)中,你幾乎沒有機會去寫這段代碼。但是我們?nèi)孕枰榻B這段代碼,它可能是你面試的重點。

書寫完畢后,請在 PooledDataSource 類構(gòu)造函數(shù)中更改數(shù)據(jù)用戶名、密碼和 url 配置以滿足你所使用的數(shù)據(jù)庫環(huán)境。運行一下這段代碼,如果一切順利,在控制臺中你會看到以下輸出內(nèi)容(只截取了部分內(nèi)容):

18:31:44.914 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Opening JDBC Connection
****
username: peter
****
18:31:45.413 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 1234250905 to pool.

2.2 使用流程

在代碼中,我們添加了一定量的注釋說明了流程,接下來我們來總結(jié)一下。

對于 MyBatis 的基礎(chǔ)使用可大致分為以下3步:

  1. 得到 MyBatis 配置信息,即代碼中的Configuration類。Configuration 負責 MyBatis 架構(gòu)中的配置部分,例如:dataSource數(shù)據(jù)源信息都會交給 Configuration 去管理;這一步其實是比較繁雜的,Environment 是 Configuration 中的一部分,而 PooledDataSource 和 JdbcTransactionFactory 又是 Environment 中的一部分,它們是屬于層層遞進的關(guān)系。其中 JdbcTransactionFactory 表示事務(wù)工廠,當 MyBatis 需要新建事務(wù)的時候,會通過它來新建;PooledDataSource 表示數(shù)據(jù)源,通過其構(gòu)造參數(shù),我們傳入了數(shù)據(jù)庫 url,數(shù)據(jù)庫用戶和密碼等配置;Configuration 可以有多個 Environment,因此每個 Environment 都必須有唯一的 id,即代碼中的 development,將這些配置搭配組合后就是一個可用的 Configuration。
  2. 通過 Configuration 來創(chuàng)建 SqlSessionFactory。MyBatis 是通過會話的方式來執(zhí)行 SQL 的,因為我們必須擁有一個會話創(chuàng)建器,即會話工廠。
  3. 新建SqlSession來執(zhí)行 SQL。有了 SqlSessionFactory 后,我們就可以方便地新建會話,并通過會話來執(zhí)行 SQL 了。

PreparedStatement及以下的內(nèi)容,其實并不屬于 MyBatis,它們是 JDBC 提供的,在實際的 MyBatis 開發(fā)中,你也不會這樣去執(zhí)行 SQL,在這里我們只是為了展示 MyBatis 和 JDBC 的關(guān)系。

可以看到,編程式使用 MyBatis 其實是比較復(fù)雜,你需要十分熟悉 MyBatis 的 API,而且這種硬編碼的方式是比較笨重的,所以絕大多數(shù)資料都推薦配置的方式使用 MyBatis。

3. 配置式使用

接下來,我們一起來看一下如何通過配置來使用 MyBatis。

3.1 配置文件

首先,我們在resources目錄下新建mybatis-config.xml配置文件,并在其中添加上如下配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/imooc?useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

有了上面編程式 API 的使用經(jīng)驗,那么你一定可以輕松的看懂配置項,configuration 標簽對應(yīng) Configuration 類,environment 標簽對應(yīng) Environment 類,transactionManager標簽和dataSource標簽分別對應(yīng) JdbcTransactionFactory 和 PooledDataSource 類。

有了配置文件后,我們無需一個挨著一個的新建類,而是在配置文件中指定即可,如driver的值指定為com.mysql.cj.jdbc.Driver。當后續(xù)需要修改的時候,也不需要去代碼中找,而是直接在配置文件中修改即可。

TIPS: 注意, 請在你自己的配置文件中修改數(shù)據(jù)庫配置,以滿足你自己的數(shù)據(jù)庫環(huán)境。

3.2 啟動 MyBatis

同樣地,我們在 patter 包下新建另一個類,名為StartWithXml.java,并填充以下代碼:

package com.imooc.mybatis.pattern;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@SuppressWarnings({"SqlResolve", "SqlNoDataSourceInspection", "Duplicates"})
public class StartWithXml {

  public static void main(String[] args) throws IOException, SQLException {
    // 配置式使用MyBatis
    String resource = "mybatis-config.xml";
    // 讀取配置文件
    InputStream inputStream = Resources.getResourceAsStream(resource);
    // 按照配置文件得到 SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    // 新建會話
    SqlSession session = sqlSessionFactory.openSession();
    // 執(zhí)行SQL
    PreparedStatement preStatement = session.getConnection().prepareStatement("SELECT * FROM imooc_user WHERE id = ?");
    preStatement.setInt(1, 1);
    ResultSet result = preStatement.executeQuery();
    while (result.next()) {
      System.out.println("username: " + result.getString("username"));
    }
    // 關(guān)閉會話
    session.close();
  }
}

運行代碼,你會看到跟上面一樣的結(jié)果。

3.3 使用流程

配置式使用 MyBatis,也可分為3步:

  1. 讀取配置文件,即mybatis-config.xml。
  2. 通過配置文件來創(chuàng)建 SqlSessionFactory。
  3. 新建SqlSession來執(zhí)行 SQL。

與編程式相比,配置式更為簡潔,更易維護,所以使用廣泛,幾乎所有資料都推薦這種方式來使用 MyBatis。但是編程式并非沒有意義,它可以幫助你梳理 MyBatis 結(jié)構(gòu),有了編程式的基礎(chǔ),你才能更加容易地看懂配置文件中的內(nèi)容,在后續(xù)的學習中,我們都將默認地使用配置式。

4. 小結(jié)

  • 在實際的開發(fā)中,你都少有機會去按照本小節(jié)的方式去使用 MyBatis,但是這對你深入理解MyBatis結(jié)構(gòu)有重要作用。
  • 編程式使用的 API 較多,我們沒有必要去死記硬背,熟練掌握其使用流程,能在需要的時候查閱即可。