摘要:本文通過方法來用執行帶參數的命令,來介紹執行的大致過程。三是返回值的類型。返回值的類型包括兩部分,一是返回結果本身的類型,二是返回結果的每個字段各是什么類型用于轉換。對象是一個很復雜的對象,涵蓋了執行命令需要的所有東西。
本文通過 main() 方法來用 mybatis 執行帶參數的 SQL 命令,來介紹 mybatis 執行 SQL 的大致過程。
準備數據庫準備一個 MySQL 數據庫,十分鐘內快速運行起一個 MySQL 的方法可以看這篇文章。
數據庫內創建一張很簡單的表:
create database test; use test; create table t1(int id); insert into t1 set id=11;創建項目
首先創建一個空的 Maven 項目,加上下面的依賴關系:
創建 main() 方法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
在項目中隨便創建一個類,寫一個空的 main() 方法,確認這個方法可以正常運行。
接下來我們在 main() 方法中,一步一步完成這個使用 mybatis 執行 SQL 命令的例子。
1. 初始化數據源要連接數據庫,自然要先準備好數據源對象,這里就不多做解釋了:
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 變量就是準備好的數據源對象。
2. 定義要執行的 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; ListresultPropertyMappings = Collections.emptyList();
這個定義分為三部分:
一是命令本身,包括命令的類型、ID、語句。在 mybatis 中,每條 SQL 命令都有唯一的 ID,因為在 SqlSession 里面,執行哪條 SQL 命令就是通過 ID 來指定的。
二是參數,包括參數的名稱、類型、參數值。這個例子中只有一個參數,參數名稱 id 和語句里面的 #{id} 名稱必須保持一致。
三是返回值的類型。返回值的類型包括兩部分,一是返回結果本身的類型,二是返回結果的每個字段各是什么類型(用于轉換)。這個例子當中,我們簡單的將返回結果包裝為 Map 對象,所以里面的字段值就不去指定類型轉換了,即 resultPropertyMappings 變量是個空的 List。
上面這 8 個變量,會在組裝 mybatis 的 SQL 命令過程中用到。
3. 初始化 mybatis 配置mybatis 的所有配置都在 org.apache.ibatis.session.Configuration 對象當中。Configuration 對象是一個很復雜的對象,涵蓋了執行 SQL 命令需要的所有東西。正常使用的情況下,我們要為它配置 XML 路徑、Mapper 所在的包、查詢結果的類型轉換等等。在本文的例子當中,我們用不到 XML,所以只做最簡單的配置:
JdbcTransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("default", transactionFactory, dataSource); Configuration configuration = new Configuration(environment);
可以看出,dataSource 變量是先放入 Environment 對象,然后再放入 Configuration 對象的。到這里,mybatis 的數據源就配置好了。接下來我們將之前定義的 SQL 命令加入 mybatis。
4. 構建 MappedStatementmybatis 當中所有的 SQL 命令最終都是一個 MappedStatement 對象。但要構建它可不簡單,我們要把前面定義的 SQL 命令三部分分別構建相應的對象,然后再組裝成 MappedStatement 對象。
// 1. 構建 SqlSource 對象 SqlSource sqlSource = new SqlSourceBuilder( configuration ).parse( commandStatement, parameterType, null ); // 2. 構建 ResultMap 對象 String resultMapId = commandId + "-Inline"; ResultMap resultMap = new ResultMap.Builder( configuration, resultMapId, resultType, resultPropertyMappings, null ).build(); // 3. 構建 ParameterMap 對象 ParameterMap parameterMap = new ParameterMap.Builder( configuration, commandId, null, Collections.singletonList( new ParameterMapping.Builder( configuration, parameterName, Integer.class ).build() ) ).build(); // 4. 將 SqlSource 對象、 ResultMap 對象和 ParameterMap 對象 // 組合成最終的 MappedStatement 對象 MappedStatement mappedStatement = new MappedStatement.Builder( configuration, commandId, sqlSource, commandType ).resultMaps( Collections.singletonList(resultMap) ).parameterMap( parameterMap ).build();
看得出,因為構建起來很復雜,所以 mybatis 定義了大量 Builder 類來用。
5. 將 MappedStatement 加入 mybatisconfiguration.addMappedStatement(mappedStatement);
所有的 MappedStatement 都要放入 Configuration。
6. 初始化 SqlSession 并執行 SQL 命令這一步相信熟悉 mybatis 的同學都會用,就不多解釋了。
SqlSessionFactory sqlSessionFactory = new DefaultSqlSessionFactory(configuration); SqlSession sqlSession = sqlSessionFactory.openSession(true); List
上面這六個片段依次加入 main() 方法,即可完整執行。這就是 mybatis 執行 SQL 命令的基本套路。
有的同學就會問,那我在 XML 里面定義的 SQL 語句是怎么解析執行的呢?mybatis 有個叫 org.apache.ibatis.scripting.LanguageDriver 的接口類,負責將 XML 或其他語言的動態 SQL 模板解析為最終的 SQL 語句,然后交給 SqlSourceBuilder 生成 SqlSource 對象。具體可以看看源碼。相信理解了本文之后再去看 mybatis 的源碼,會對它的執行機制有更清晰的了解。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73955.html
摘要:原因就是傳入的和原有的單引號,正好組成了,而后面恒等于,所以等于對這個庫執行了查所有的操作。類比的執行流程和原有的我們使用的方法就是。可以理解為就是用來解析定制的符號的語句。后續的流程,就和正常的流程一致了。 前言 在JDBC中,主要使用的是兩種語句,一種是支持參數化和預編譯的PrepareStatement,能夠支持原生的Sql,也支持設置占位符的方式,參數化輸入的參數,防止Sql注...
摘要:一的官方資料官方文檔源碼二介紹大致的意思是可以幫助所有版本的和以上版本的生成代碼。其中目前最新的版本可以使用。指定生成一系列對象的環境。定義了生成的注釋形式。與生成的實體相關。生成接口和類以達到輕易使用生成的模型和映射文件的目的。 一:MyBatis Generator的官方資料 MyBatis Generator官方文檔github源碼:MyBatis Generator (MBG)...
摘要:前言嗨,小伙伴們,這篇博文將帶大家手寫,讓大家對的核心原理以及工作流程有更加深刻的理解。模塊顧名思義,就是框架配置類,用于解析配置文件加載相關環境。配置模塊這里的對框架的配置使用了簡單的,主要原因還是簡單易懂然后節省時間。 前言 (????)??嗨,小伙伴們,這篇博文將帶大家手寫mybatis,讓大家對mybaits的核心原理以及工作流程有更加深刻的理解。在上篇Spring-Mybat...
摘要:是最流行的關系型數據庫管理系統之一,在應用方面,是最好的,關系數據庫管理系統應用軟件。是一種關系數據庫管理系統,關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。 本章主要是對MyBatis-Plus的初步介紹,包括一些背景知識、環境搭建、初步使用等知識和例子。對于背景知識,主要包含對MyBatis-Plus的特性介紹、為什么使用MyB...
閱讀 2413·2021-08-18 10:21
閱讀 2519·2019-08-30 13:45
閱讀 2155·2019-08-30 13:16
閱讀 2100·2019-08-30 12:52
閱讀 1363·2019-08-30 11:20
閱讀 2622·2019-08-29 13:47
閱讀 1622·2019-08-29 11:22
閱讀 2760·2019-08-26 12:11