MyBatis 是一个 Java 数据持久层框架。通过 MyBatis 集成表格存储 JDBC 驱动,可以在 Java 项目中以 SQL 方式访问表格存储数据。更多信息,参见MyBatis 官网。
前提条件
已获取 AccessKey,RAM 用户需具备
"Action": "ots:SQL*"权限。已创建数据表和映射表,详见DDL 操作。
使用流程
完成以下步骤,将 MyBatis 与表格存储 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>手动安装
下载表格存储 JDBC 驱动并导入到项目中。具体下载路径参见表格存储 JDBC 驱动。
步骤二:安装 MyBatis
可以通过以下两种方式安装 MyBatis。
添加Maven依赖
在 Maven 工程中使用 MyBatis,在 pom.xml 中加入以下依赖。以 3.5.9 版本为例,在 <dependencies> 内加入如下内容:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>手动安装
下载 MyBatis 安装包并导入到项目中。具体下载路径参见MyBatis 安装包。
步骤三:映射 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 为例。
<?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-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
是
表格存储 JDBC 驱动的类名,固定为
com.alicloud.openservices.tablestore.jdbc.OTSDriver。url
string
是
实例访问地址。格式为
jdbc:ots:endpoint/instanceName,其中 endpoint 为实例的服务地址,instanceName 为实例名称,根据实际情况修改。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 查询数据
表格存储不支持事务,openSession 的 autoCommit 参数必须设置为 true。
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 {
String resource = "mybatis/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 表格存储不支持事务,autoCommit 必须设置为 true。
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();
}
}