MyBatis是一個Java資料持久層架構,支援自訂SQL、預存程序以及進階映射。您可以通過MyBatis使用Table Store的JDBC驅動來快速存取Table Store。
背景資訊
MyBatis是一個Java資料持久層架構,支援自訂SQL、預存程序以及進階映射。使用MyBatis能免除JDBC代碼以及設定參數和擷取結果集的工作。更多資訊,請參見MyBatis官網文檔。
注意事項
目前支援使用SQL查詢功能的地區有華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、華南1(深圳)、西南1(成都)、中國香港、新加坡、印尼(雅加達)、德國(法蘭克福)、沙特(利雅得)和美國(維吉尼亞)。
前提條件
如果要使用RAM使用者進行操作,請確保已建立RAM使用者,並為RAM使用者授予所有SQL操作許可權,即在自訂權限原則中配置
"Action": "ots:SQL*"
。具體操作,請參見通過RAM Policy為RAM使用者授權。已擷取AccessKey(包括AccessKey ID和AccessKey Secret)。具體操作,請參見建立AccessKey。
使用流程
步驟一:安裝JDBC驅動
您可以通過以下兩種方式安裝JDBC驅動。
下載Table StoreJDBC驅動並匯入到專案中。具體下載路徑請參見Table StoreJDBC驅動。
在Maven專案中加入依賴項
在Maven工程中使用Table StoreJDBC驅動,只需在pom.xml中加入相應依賴即可。以5.17.0版本為例,在<dependencies>內加入如下內容:
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>tablestore-jdbc</artifactId> <version>5.17.0</version> </dependency>
步驟二:安裝MyBatis
您可以通過以下兩種方式安裝MyBatis。
下載MyBatis安裝包(即mybatis-x.x.x.jar)並匯入到專案中。具體下載路徑請參見MyBatis安裝包。
mybatis-x.x.x.jar中的
x.x.x
表示MyBatis的版本號碼,請根據實際下載所需版本的安裝包。在Maven專案中加入依賴項
在Maven工程中使用MyBatis,只需在pom.xml中加入相應依賴即可。以3.5.9版本為例,在<dependencies>內加入如下內容:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency>
步驟三:映射SQL欄位
建立資料表欄位對應的Java Bean。在本樣本中trip_id為資料表中的唯一主鍵。
重要填寫時請確保Java Bean的成員變數名稱和資料表的欄位名相同。
package mybatis; public class Trip { private long trip_id; private long duration; private String start_date; private String end_date; private long start_station_number; private long end_station_number; private String start_station; private String end_station; private String bike_number; private String member_type; // 添加設定/返回欄位值方法。 // 此處以trip_id欄位為例,其他欄位類似,請根據實際需要添加。 public void setTrip_Id(Long trip_id){ this.trip_id =trip_id } public Long getTrip_Id() { return trip_id; } }
建立映射設定檔,並在映射設定檔中定義查詢條件。此處以在mybatis目錄下建立TripMapper.xml為例介紹。
關於SQL功能支援情況,請參見SQL支援功能說明。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="mybatis.TripMapper"> <select id="selectTrip" resultType="mybatis.Trip"> select * from trips where trip_id = #{id} </select> </mapper>
步驟四:構建SqlSessionFactory
SqlSessionFactory用於建立MyBatis會話,通過MyBatis會話,可以實現用戶端與Table Store之間的串連。
建立MyBatis設定檔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"/> <!-- 設定資料來源類型。由於Table StoreJDBC驅動需要主動關閉後才能讓進程退出,請根據實際使用選擇合適的資料來源類型。--> <!-- 如果程式常駐執行,則您可以使用POOLED維護一個串連池;如果希望程式完成資料查詢後退出,則只能使用UNPOOLED。--> <dataSource type="UNPOOLED"> <property name="driver" value="com.alicloud.openservices.tablestore.jdbc.OTSDriver"/> <property name="url" value="jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance"/> <property name="username" value="***********************"/> <property name="password" value="********************************"/> </dataSource> </environment> </environments> <mappers> <!-- 設定為映射設定檔的路徑。--> <mapper resource="mybatis/TripMapper.xml"/> </mappers> </configuration>
配置項說明請參見下表。
配置項
類型
是否必選
樣本
描述
driver
class
是
com.alicloud.openservices.tablestore.jdbc.OTSDriver
Table StoreJDBC驅動的類名,設定為com.alicloud.openservices.tablestore.jdbc.OTSDriver。
url
string
是
jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance
執行個體訪問地址。格式為
jdbc:ots:endpoint/instanceName
,其中endpoint為執行個體的服務地址。更多資訊,請參見服務地址。instanceName為執行個體名稱,請根據實際情況修改。填寫時必須加上首碼
jdbc:ots:
。username
string
是
************************
阿里雲帳號或者RAM使用者的AccessKey ID。
password
string
是
********************************
阿里雲帳號或者RAM使用者的AccessKey Secret。
通過載入MyBatis設定檔來構建SqlSessionFactory。
String resource = "mybatis/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
步驟五:建立SqlSession查詢資料
SqlSession session = sqlSessionFactory.openSession(true);
Trip trip = (Trip) session.selectOne("mybatis.TripMapper.selectTrip", 99L);
System.out.println("trip id: " + trip.getTrip_id());
System.out.println("start date: " + trip.getStart_date());
System.out.println("end date: " + trip.getEnd_date());
System.out.println("duration: " + trip.getDuration());
session.close();
完整樣本
以下樣本用於查詢表中主鍵列值為99的行資料,並擷取指定列的值。
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 mybatis.Trip;
import java.io.IOException;
import java.io.InputStream;
public class MyBatisDemo {
public static void main(String[] args) throws IOException {
// 設定MyBatis設定檔的路徑。
String resource = "mybatis/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 由於Table Store目前暫不支援事務,因此是否自動認可配置必須設定為true。
SqlSession session = sqlSessionFactory.openSession(true);
// 填寫要執行的SELECT語句對應的標識並設定主索引值為99。
// SELECT語句對應的標識格式為“映射設定檔路徑.SELECT語句id”,樣本中mybatis.TripMapper.selectTrip表示執行mybatis節點下TripMapper.xml檔案內id為selectTrip的SELECT語句。
Trip trip = (Trip) session.selectOne("mybatis.TripMapper.selectTrip", 99L);
// 列印需要擷取的列值。
System.out.println("trip id: " + trip.getTrip_id());
System.out.println("start date: " + trip.getStart_date());
System.out.println("end date: " + trip.getEnd_date());
System.out.println("duration: " + trip.getDuration());
session.close();
}
}
相關文檔
您還可以通過JDBC直連、Hibernate等方式使用JDBC訪問Table Store。具體操作,請參見通過Hibernate使用SQL查詢資料和JDBC串連Table Store。
您還可以通過控制台、命令列工具、Table StoreSDK、Go語言驅動等方式訪問Table Store。具體操作,請參見通過控制台使用SQL查詢、通過命令列工具使用SQL查詢、通過SDK使用SQL查詢、通過Go語言驅動使用SQL查詢。
您還可以將Tablestore執行個體接入到DataWorks或DMS,然後使用SQL查詢與分析Tablestore資料。更多資訊,請參見接入到DataWorks和接入到DMS。
您還可以通過MaxCompute、Spark、Hive或者HadoopMR、Function Compute、Flink、PrestoDB等計算引擎實現表中資料的計算與分析。具體操作,請參見計算與分析。
如果要以圖表等形式可視化展示資料,您可以通過對接Grafana實現。更多資訊,請參見對接Grafana。