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

MyBatis 簡單使用

1. 前言

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

2. 編程式使用

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

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

2.1 啟動(dòng) MyBatis

在 mybatis-primer 項(xiàng)目中,有一個(gè)默認(rèn)的包com.imooc.mybatis,在該包下,我們新建一個(gè)包名為pattern,并在其中新建一個(gè)名為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
    // 準(zhǔn)備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);
    // 開始一個(gè) sql 會(huì)話
    SqlSession session = sqlSessionFactory.openSession();
    // 得到 sql 連接并運(yùn)行 sql 語句
    PreparedStatement preStatement = session
      .getConnection()
      .prepareStatement("SELECT * FROM imooc_user WHERE id = ?");
    preStatement.setInt(1, 1);
    ResultSet result = preStatement.executeQuery();
    // 驗(yàn)證結(jié)果
    while (result.next()) {
      System.out.println("username: " + result.getString("username"));
    }
    // 關(guān)閉會(huì)話
    session.close();
  }
}

即使你不熟悉 MyBatis,也沒有必要被這段代碼給嚇到,因?yàn)樵趯?shí)際的開發(fā)中,你幾乎沒有機(jī)會(huì)去寫這段代碼。但是我們?nèi)孕枰榻B這段代碼,它可能是你面試的重點(diǎn)。

書寫完畢后,請?jiān)?PooledDataSource 類構(gòu)造函數(shù)中更改數(shù)據(jù)用戶名、密碼和 url 配置以滿足你所使用的數(shù)據(jù)庫環(huán)境。運(yùn)行一下這段代碼,如果一切順利,在控制臺中你會(huì)看到以下輸出內(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 負(fù)責(zé) MyBatis 架構(gòu)中的配置部分,例如:dataSource數(shù)據(jù)源信息都會(huì)交給 Configuration 去管理;這一步其實(shí)是比較繁雜的,Environment 是 Configuration 中的一部分,而 PooledDataSource 和 JdbcTransactionFactory 又是 Environment 中的一部分,它們是屬于層層遞進(jìn)的關(guān)系。其中 JdbcTransactionFactory 表示事務(wù)工廠,當(dāng) MyBatis 需要新建事務(wù)的時(shí)候,會(huì)通過它來新建;PooledDataSource 表示數(shù)據(jù)源,通過其構(gòu)造參數(shù),我們傳入了數(shù)據(jù)庫 url,數(shù)據(jù)庫用戶和密碼等配置;Configuration 可以有多個(gè) Environment,因此每個(gè) Environment 都必須有唯一的 id,即代碼中的 development,將這些配置搭配組合后就是一個(gè)可用的 Configuration。
  2. 通過 Configuration 來創(chuàng)建 SqlSessionFactory。MyBatis 是通過會(huì)話的方式來執(zhí)行 SQL 的,因?yàn)槲覀儽仨殦碛幸粋€(gè)會(huì)話創(chuàng)建器,即會(huì)話工廠。
  3. 新建SqlSession來執(zhí)行 SQL。有了 SqlSessionFactory 后,我們就可以方便地新建會(huì)話,并通過會(huì)話來執(zhí)行 SQL 了。

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

可以看到,編程式使用 MyBatis 其實(shí)是比較復(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)驗(yàn),那么你一定可以輕松的看懂配置項(xiàng),configuration 標(biāo)簽對應(yīng) Configuration 類,environment 標(biāo)簽對應(yīng) Environment 類,transactionManager標(biāo)簽和dataSource標(biāo)簽分別對應(yīng) JdbcTransactionFactory 和 PooledDataSource 類。

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

TIPS: 注意, 請?jiān)谀阕约旱呐渲梦募行薷臄?shù)據(jù)庫配置,以滿足你自己的數(shù)據(jù)庫環(huán)境。

3.2 啟動(dòng) MyBatis

同樣地,我們在 patter 包下新建另一個(gè)類,名為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);
    // 新建會(huì)話
    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)閉會(huì)話
    session.close();
  }
}

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

3.3 使用流程

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

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

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

4. 小結(jié)

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