成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

介紹 mybatis 執(zhí)行 SQL 的大致過(guò)程

derek_334892 / 3084人閱讀

摘要:本文通過(guò)方法來(lái)用執(zhí)行帶參數(shù)的命令,來(lái)介紹執(zhí)行的大致過(guò)程。三是返回值的類型。返回值的類型包括兩部分,一是返回結(jié)果本身的類型,二是返回結(jié)果的每個(gè)字段各是什么類型用于轉(zhuǎn)換。對(duì)象是一個(gè)很復(fù)雜的對(duì)象,涵蓋了執(zhí)行命令需要的所有東西。

本文通過(guò) main() 方法來(lái)用 mybatis 執(zhí)行帶參數(shù)的 SQL 命令,來(lái)介紹 mybatis 執(zhí)行 SQL 的大致過(guò)程。

準(zhǔn)備數(shù)據(jù)庫(kù)

準(zhǔn)備一個(gè) MySQL 數(shù)據(jù)庫(kù),十分鐘內(nèi)快速運(yùn)行起一個(gè) MySQL 的方法可以看這篇文章。

數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建一張很簡(jiǎn)單的表:

create database test;
use test;
create table t1(int id);
insert into t1 set id=11;
創(chuàng)建項(xiàng)目

首先創(chuàng)建一個(gè)空的 Maven 項(xiàng)目,加上下面的依賴關(guān)系:


  
  
    org.mybatis
    mybatis
    3.5.0
  
  
  
    org.apache.commons
    commons-dbcp2
    2.5.0
  
  
  
    mysql
    mysql-connector-java
    8.0.15
  
  
  
    ch.qos.logback
    logback-classic
    1.2.3
  
創(chuàng)建 main() 方法

在項(xiàng)目中隨便創(chuàng)建一個(gè)類,寫一個(gè)空的 main() 方法,確認(rèn)這個(gè)方法可以正常運(yùn)行。

接下來(lái)我們?cè)?main() 方法中,一步一步完成這個(gè)使用 mybatis 執(zhí)行 SQL 命令的例子。

1. 初始化數(shù)據(jù)源

要連接數(shù)據(jù)庫(kù),自然要先準(zhǔn)備好數(shù)據(jù)源對(duì)象,這里就不多做解釋了:

String url = "jdbc:mysql://localhost/test?serverTimezone=UTC";
String username = "root";
String password = "root123";

org.apache.commons.dbcp2.BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);

dataSource 變量就是準(zhǔn)備好的數(shù)據(jù)源對(duì)象。

2. 定義要執(zhí)行的 SQL 命令
SqlCommandType commandType = SqlCommandType.SELECT;
String commandId = "sql1";
String commandStatement = "select * from t1 where id=#{id}";

String parameterName = "id";
Class parameterType = Integer.class;
Object parameterValue = 11;

Class resultType = HashMap.class;
List resultPropertyMappings = Collections.emptyList();

這個(gè)定義分為三部分:

一是命令本身,包括命令的類型、ID、語(yǔ)句。在 mybatis 中,每條 SQL 命令都有唯一的 ID,因?yàn)樵?SqlSession 里面,執(zhí)行哪條 SQL 命令就是通過(guò) ID 來(lái)指定的。

二是參數(shù),包括參數(shù)的名稱、類型、參數(shù)值。這個(gè)例子中只有一個(gè)參數(shù),參數(shù)名稱 id 和語(yǔ)句里面的 #{id} 名稱必須保持一致。

三是返回值的類型。返回值的類型包括兩部分,一是返回結(jié)果本身的類型,二是返回結(jié)果的每個(gè)字段各是什么類型(用于轉(zhuǎn)換)。這個(gè)例子當(dāng)中,我們簡(jiǎn)單的將返回結(jié)果包裝為 Map 對(duì)象,所以里面的字段值就不去指定類型轉(zhuǎn)換了,即 resultPropertyMappings 變量是個(gè)空的 List。

上面這 8 個(gè)變量,會(huì)在組裝 mybatis 的 SQL 命令過(guò)程中用到。

3. 初始化 mybatis 配置

mybatis 的所有配置都在 org.apache.ibatis.session.Configuration 對(duì)象當(dāng)中。Configuration 對(duì)象是一個(gè)很復(fù)雜的對(duì)象,涵蓋了執(zhí)行 SQL 命令需要的所有東西。正常使用的情況下,我們要為它配置 XML 路徑、Mapper 所在的包、查詢結(jié)果的類型轉(zhuǎn)換等等。在本文的例子當(dāng)中,我們用不到 XML,所以只做最簡(jiǎn)單的配置:

JdbcTransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("default", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);

可以看出,dataSource 變量是先放入 Environment 對(duì)象,然后再放入 Configuration 對(duì)象的。到這里,mybatis 的數(shù)據(jù)源就配置好了。接下來(lái)我們將之前定義的 SQL 命令加入 mybatis。

4. 構(gòu)建 MappedStatement

mybatis 當(dāng)中所有的 SQL 命令最終都是一個(gè) MappedStatement 對(duì)象。但要構(gòu)建它可不簡(jiǎn)單,我們要把前面定義的 SQL 命令三部分分別構(gòu)建相應(yīng)的對(duì)象,然后再組裝成 MappedStatement 對(duì)象。

// 1. 構(gòu)建 SqlSource 對(duì)象
SqlSource sqlSource = new SqlSourceBuilder(
    configuration
).parse(
    commandStatement, parameterType, null
);

// 2. 構(gòu)建 ResultMap 對(duì)象
String resultMapId = commandId + "-Inline";
ResultMap resultMap = new ResultMap.Builder(
    configuration, resultMapId, resultType, resultPropertyMappings, null
).build();

// 3. 構(gòu)建 ParameterMap 對(duì)象
ParameterMap parameterMap = new ParameterMap.Builder(
    configuration, commandId, null,
    Collections.singletonList(
        new ParameterMapping.Builder(
            configuration, parameterName, Integer.class
        ).build()
    )
).build();

// 4. 將 SqlSource 對(duì)象、 ResultMap 對(duì)象和 ParameterMap 對(duì)象
//    組合成最終的 MappedStatement 對(duì)象
MappedStatement mappedStatement = new MappedStatement.Builder(
    configuration, commandId, sqlSource, commandType
).resultMaps(
    Collections.singletonList(resultMap)
).parameterMap(
    parameterMap
).build();

看得出,因?yàn)闃?gòu)建起來(lái)很復(fù)雜,所以 mybatis 定義了大量 Builder 類來(lái)用。

5. 將 MappedStatement 加入 mybatis
configuration.addMappedStatement(mappedStatement);

所有的 MappedStatement 都要放入 Configuration。

6. 初始化 SqlSession 并執(zhí)行 SQL 命令

這一步相信熟悉 mybatis 的同學(xué)都會(huì)用,就不多解釋了。

SqlSessionFactory sqlSessionFactory = new DefaultSqlSessionFactory(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
List result = sqlSession.selectList(commandId, parameterValue);

System.out.println(result);

上面這六個(gè)片段依次加入 main() 方法,即可完整執(zhí)行。這就是 mybatis 執(zhí)行 SQL 命令的基本套路。

有的同學(xué)就會(huì)問(wèn),那我在 XML 里面定義的 SQL 語(yǔ)句是怎么解析執(zhí)行的呢?mybatis 有個(gè)叫 org.apache.ibatis.scripting.LanguageDriver 的接口類,負(fù)責(zé)將 XML 或其他語(yǔ)言的動(dòng)態(tài) SQL 模板解析為最終的 SQL 語(yǔ)句,然后交給 SqlSourceBuilder 生成 SqlSource 對(duì)象。具體可以看看源碼。相信理解了本文之后再去看 mybatis 的源碼,會(huì)對(duì)它的執(zhí)行機(jī)制有更清晰的了解。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73955.html

相關(guān)文章

  • Mybatis系列】從源碼角度理解Mybatis$和#作用

    摘要:原因就是傳入的和原有的單引號(hào),正好組成了,而后面恒等于,所以等于對(duì)這個(gè)庫(kù)執(zhí)行了查所有的操作。類比的執(zhí)行流程和原有的我們使用的方法就是??梢岳斫鉃榫褪怯脕?lái)解析定制的符號(hào)的語(yǔ)句。后續(xù)的流程,就和正常的流程一致了。 前言 在JDBC中,主要使用的是兩種語(yǔ)句,一種是支持參數(shù)化和預(yù)編譯的PrepareStatement,能夠支持原生的Sql,也支持設(shè)置占位符的方式,參數(shù)化輸入的參數(shù),防止Sql注...

    yanwei 評(píng)論0 收藏0
  • MyBatis Generator:Mybatis代碼生成器

    摘要:一的官方資料官方文檔源碼二介紹大致的意思是可以幫助所有版本的和以上版本的生成代碼。其中目前最新的版本可以使用。指定生成一系列對(duì)象的環(huán)境。定義了生成的注釋形式。與生成的實(shí)體相關(guān)。生成接口和類以達(dá)到輕易使用生成的模型和映射文件的目的。 一:MyBatis Generator的官方資料 MyBatis Generator官方文檔github源碼:MyBatis Generator (MBG)...

    SimonMa 評(píng)論0 收藏0
  • 教你手寫Mybatis框架

    摘要:前言嗨,小伙伴們,這篇博文將帶大家手寫,讓大家對(duì)的核心原理以及工作流程有更加深刻的理解。模塊顧名思義,就是框架配置類,用于解析配置文件加載相關(guān)環(huán)境。配置模塊這里的對(duì)框架的配置使用了簡(jiǎn)單的,主要原因還是簡(jiǎn)單易懂然后節(jié)省時(shí)間。 前言 (????)??嗨,小伙伴們,這篇博文將帶大家手寫mybatis,讓大家對(duì)mybaits的核心原理以及工作流程有更加深刻的理解。在上篇Spring-Mybat...

    antyiwei 評(píng)論0 收藏0
  • MyBatis-Plus初步

    摘要:是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在應(yīng)用方面,是最好的,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)應(yīng)用軟件。是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性。 本章主要是對(duì)MyBatis-Plus的初步介紹,包括一些背景知識(shí)、環(huán)境搭建、初步使用等知識(shí)和例子。對(duì)于背景知識(shí),主要包含對(duì)MyBatis-Plus的特性介紹、為什么使用MyB...

    娣辯孩 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<