选择驱动或 ORM 框架
TiDB 兼容 MySQL 的协议,但存在部分与 MySQL 不兼容的特性,例如:
TiDB 不支持:
- 存储过程与函数
- 触发器
- 外键约束
TiDB 与 MySQL 有差异:
- 自增 ID:可保证全局唯一,或单 TiDB 节点的自增,但无法保证全局自增。
全部兼容性差异可查看与 MySQL 兼容性对比
Java
本节介绍 Java 语言的 Driver 及 ORM 的使用方式。
Java Drivers
- MySQL-JDBC
- TiDB-JDBC
支持等级:Full
TiDB-JDBC 是基于 MySQL 8.0.29 的定制版本。TiDB-JDBC 基于 MySQL 官方 8.0.29 版本编译,修复了原 JDBC 在 prepare 模式下多参数、多字段 EOF 的错误,并新增 TiCDC snapshot 自动维护和 SM3 认证插件等功能。
基于 SM3 的认证仅在 TiDB 版本的 MySQL Connector/J 中支持。
如果你使用的是 Maven,请将以下内容添加到你的 <dependencies></dependencies>
:
<dependency>
<groupId>io.github.lastincisor</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29-tidb-1.0.0</version>
</dependency>
如果你需要使用 SM3 认证,请将以下内容添加到你的 <dependencies></dependencies>
:
<dependency>
<groupId>io.github.lastincisor</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29-tidb-1.0.0</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.67</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.67</version>
</dependency>
如果你使用的是 Gradle,请将以下内容添加到你的 dependencies
:
implementation group: 'io.github.lastincisor', name: 'mysql-connector-java', version: '8.0.29-tidb-1.0.0'
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.67'
implementation group: 'org.bouncycastle', name: 'bcpkix-jdk15on', version: '1.67'
Java ORM 框架
- Hibernate
- MyBatis
支持等级:Full
你可以使用 Gradle 或 Maven 获取你的应用程序的所有依赖项,且会帮你下载依赖项的间接依赖,而无需你手动管理复杂的依赖关系。注意,只有 Hibernate 6.0.0.Beta2
及以上版本才支持 TiDB 方言。
如果你使用的是 Maven,请将以下内容添加到你的 <dependencies></dependencies>
:
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.CR2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
如果你使用的是 Gradle
,请将以下内容添加到你的 dependencies
:
implementation 'org.hibernate:hibernate-core:6.0.0.CR2'
implementation 'mysql:mysql-connector-java:5.1.49'
- 有关原生 Java 使用 Hibernate 进行 TiDB 应用程序构建的例子,可参阅 TiDB 和 Java 的简单 CRUD 应用程序 - 使用 Hibernate。
- 有关 Spring 使用 Spring Data JPA、Hibernate 进行 TiDB 应用程序构建的例子,可参阅使用 Spring Boot 构建 TiDB 应用程序。
额外的,你需要在 Hibernate 配置文件中指定 TiDB 方言: org.hibernate.dialect.TiDBDialect
,此方言在 Hibernate 6.0.0.Beta2
以上才可支持。若你无法升级 Hibernate 版本,那么请你直接使用 MySQL 5.7 的方言 org.hibernate.dialect.MySQL57Dialect
。但这可能造成不可预料的使用结果,及部分 TiDB 特有特性的缺失,如:序列等。
支持等级:Full
你可以使用 Gradle 或 Maven 获取应用程序的所有依赖项包括间接依赖,无需手动管理复杂的依赖关系。
如果你使用的是 Maven,请将以下内容添加到你的 <dependencies></dependencies>
:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
如果你使用的是 Gradle,请将以下内容添加到你的 dependencies
:
implementation 'org.mybatis:mybatis:3.5.9'
implementation 'mysql:mysql-connector-java:5.1.49'
使用 MyBatis 进行 TiDB 应用程序构建的例子,可参阅 TiDB 和 Java 的简单 CRUD 应用程序 - 使用 Mybatis。
Java 客户端负载均衡
tidb-loadbalance
支持等级:Full
tidb-loadbalance 是应用端的负载均衡组件。通过 tidb-loadbalance,你可以实现自动维护 TiDB server 的节点信息,根据节点信息使用 tidb-loadbalance 策略在客户端分发 JDBC 连接。客户端应用与 TiDB server 之间使用 JDBC 直连,性能高于使用负载均衡组件。
目前 tidb-loadbalance 已实现轮询、随机、权重等负载均衡策略。
如果你使用的是 Maven,请将以下内容添加到你的 <dependencies></dependencies>
:
<dependency>
<groupId>io.github.lastincisor</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29-tidb-1.0.0</version>
</dependency>
<dependency>
<groupId>io.github.lastincisor</groupId>
<artifactId>tidb-loadbalance</artifactId>
<version>0.0.5</version>
</dependency>
如果你使用的是 Gradle,请将以下内容添加到你的 dependencies
:
implementation group: 'io.github.lastincisor', name: 'mysql-connector-java', version: '8.0.29-tidb-1.0.0'
implementation group: 'io.github.lastincisor', name: 'tidb-loadbalance', version: '0.0.5'
Golang
本节介绍 Golang 语言的 Driver 及 ORM 的使用方式。
Golang Drivers
go-sql-driver/mysql
支持等级:Full
按照 go-sql-driver/mysql 文档中的说明获取并配置 Golang 驱动程序即可使用。
有关一个完整的实例应用程序,可参阅使用 TiDB 和 go-sql-driver/mysql 构建一个 Golang 应用。
Golang ORM 框架
GORM
支持等级:Full
GORM 是一个流行的 Golang 的 ORM 框架,你可以使用 go get
获取你的应用程序的所有依赖项。
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
使用 GORM 进行 TiDB 应用程序构建的例子,可参阅 TiDB 和 Golang 的简单 CRUD 应用程序 - 使用 GORM。
Python
本节介绍 Python 语言的 Driver 及 ORM 的使用方式。
Python Drivers
- PyMySQL
- mysqlclient
- mysql-connector-python
支持等级:Compatible
按照 PyMySQL 文档中的说明下载并配置驱动程序即可使用。建议使用 1.0.2 及以上版本。
使用 PyMySQL 构建 TiDB 应用程序的例子,可参阅 TiDB 和 Python 的简单 CRUD 应用程序 - 使用 PyMySQL。
支持等级:Compatible
按照 mysqlclient 文档中的说明下载并配置驱动程序即可使用。建议使用 2.1.1 及以上版本。
使用 mysqlclient 构建 TiDB 应用程序的例子,可参阅 TiDB 和 Python 的简单 CRUD 应用程序 - 使用 mysqlclient。
支持等级:Compatible
按照 mysql-connector-python 文档中的说明下载并配置驱动程序即可使用。建议使用 8.0.31 及以上版本。
使用 mysql-connector-python 构建 TiDB 应用程序的例子,可参阅 TiDB 和 Python 的简单 CRUD 应用程序 - 使用 mysql-connector-python。
Python ORM 框架
- Django
- SQLAlchemy
- peewee
支持等级:Compatible
Django 是一个流行的 Python 的开发框架,你可以使用 pip install Django==3.2.16 django-tidb>=3.0.0
获取你的应用程序的所有依赖项。建议使用 Django 3.2.16 及以上版本。
使用 Django 构建 TiDB 应用程序的例子,可参阅使用 Django 构建 TiDB 应用程序。
支持等级:Compatible
SQLAlchemy 是一个流行的 Python 的 ORM 框架,你可以使用 pip install SQLAlchemy==1.4.44
获取你的应用程序的所有依赖项。建议使用 1.4.44 及以上版本。
使用 SQLAlchemy 构建 TiDB 应用程序的例子,可参阅 TiDB 和 Python 的简单 CRUD 应用程序 - 使用 SQLAlchemy。
支持等级:Compatible
peewee 是一个流行的 Python 的 ORM 框架,你可以使用 pip install peewee==3.15.4
获取你的应用程序的所有依赖项。建议使用 3.15.4 及以上版本。
使用 peewee 构建 TiDB 应用程序的例子,可参阅 TiDB 和 Python 的简单 CRUD 应用程序 - 使用 peewee。