MyBatis是一个Java数据持久层框架,支持自定义SQL、存储过程以及高级映射。您可以通过MyBatis使用表格存储的JDBC驱动来快速访问表格存储。
背景信息
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驱动。
-
下载表格存储JDBC驱动并导入到项目中。具体下载路径请参见 表格存储JDBC驱动 。
-
在Maven项目中加入依赖项
在Maven工程中使用表格存储JDBC驱动,只需在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会话,可以实现客户端与表格存储之间的连接。
-
创建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"/> <!-- 设置数据源类型。由于表格存储JDBC驱动需要主动关闭后才能让进程退出,请根据实际使用选择合适的数据源类型。--> <!-- 如果程序常驻执行,则您可以使用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
表格存储JDBC驱动的类名,设置为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); // 由于表格存储目前暂不支持事务,因此是否自动提交配置必须设置为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访问表格存储。具体操作,请参见 通过Hibernate使用SQL查询数据 和 JDBC连接表格存储 。
-
您还可以通过控制台、命令行工具、表格存储SDK、Go语言驱动等方式访问表格存储。具体操作,请参见 通过控制台使用SQL查询 、 通过命令行工具使用SQL查询 、 通过SDK使用SQL查询 、 通过Go语言驱动使用SQL查询 。
-
如果要加速SQL数据查询和计算,您可以通过创建二级索引或者多元索引实现。更多信息,请参见 索引选择策略 和 计算下推 。
-
您还可以通过MaxCompute、Spark、Hive或者HadoopMR、函数计算、Flink、PrestoDB等计算引擎实现表中数据的计算与分析。具体操作,请参见 计算与分析 。
-
如果要以图表等形式可视化展示数据,您可以通过对接Grafana实现。更多信息,请参见 对接Grafana 。
-
使用宽表模型可以实现元数据、大数据等多种场景的解决方案,例如 搭建海量智能元数据管理系统 、 亿量级订单管理方案 、 基于多元索引搭建亿量级店铺搜索系统 、 表格存储结合Spark流批处理实现一体化存储和计算 、 表格存储结合实时计算Flink进行大数据分析 。更多方案介绍,请参见 快速玩转Tablestore入门与实战 。
-
使用时序模型可以实现 设备时序数据开发 等方案。更多方案介绍,请参见 快速玩转Tablestore入门与实战 。
-
表格存储控制台提供了电商订单、共享汽车、快递轨迹追溯、店铺搜索、地理围栏、智能元数据等产品应用场景的场景Demo。具体样例请参见 场景Demo 。
-
SQL查询可应用在表格存储物联网存储IoTstore解决方案中作为不同类型数据的统一查询接口。更多信息,请参见 物联网存储简介 。
物联网存储IoTstore是表格存储基于物联网场景中多源异构数据存储、高并发吞吐、海量数据高性价比存储、多维度数据处理与分析等需求推出的一站式物联网解决方案,可为物联网设备元数据、消息数据、时序轨迹等海量数据提供存储、查询、检索、分析、同步等能力。