Choose Driver or ORM

Choose Driver or ORM - 图1

Note

TiDB provides the following two support levels for drivers and ORMs:

  • Full: indicates that TiDB is compatible with most features of the tool and maintains compatibility with its newer versions. PingCAP will periodically conduct compatibility tests with the latest version of Third-party tools supported by TiDB.
  • Compatible: indicates that because the corresponding third-party tool is adapted to MySQL and TiDB is highly compatible with the MySQL protocol, so TiDB can use most features of the tool. However, PingCAP has not completed a full test on all features of the tool, which might lead to some unexpected behaviors.

For more information, refer to Third-Party Tools Supported by TiDB.

TiDB is highly compatible with the MySQL protocol but some features are incompatible with MySQL. For a full list of compatibility differences, see MySQL Compatibility.

Java

This section describes how to use drivers and ORM frameworks in Java.

Java drivers

  • MySQL-JDBC
  • TiDB-JDBC

Support level: Full

You can follow the MySQL documentation to download and configure a Java JDBC driver. It is recommended to use MySQL Connector/J 8.0.33 or later with TiDB v6.3.0 and newer.

Choose Driver or ORM - 图2

Tip

There is a bug in the Connector/J 8.0 versions before 8.0.32, which might cause threads to hang when using TiDB versions earlier than v6.3.0. To avoid this issue, it is recommended that you use either MySQL Connector/J 8.0.32 or a later version, or the TiDB JDBC (see the TiDB-JDBC tab).

For an example of how to build a complete application, see Build a simple CRUD app with TiDB and JDBC.

Support level: Full

TiDB-JDBC is a customized Java driver based on MySQL 8.0.29. Compiled based on MySQL official version 8.0.29, TiDB-JDBC fixes the bug of multi-parameter and multi-field EOF in the prepare mode in the original JDBC, and adds features such as automatic TiCDC snapshot maintenance and the SM3 authentication plugin.

The authentication based on SM3 is only supported in TiDB’s TiDB-JDBC.

If you are using Maven, add the following content to the <dependencies></dependencies> section in the pom.xml file:

  1. <dependency>
  2. <groupId>io.github.lastincisor</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>8.0.29-tidb-1.0.0</version>
  5. </dependency>

If you need to enable SM3 authentication, add the following content to the <dependencies></dependencies> section in the pom.xml file:

  1. <dependency>
  2. <groupId>io.github.lastincisor</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>8.0.29-tidb-1.0.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.bouncycastle</groupId>
  8. <artifactId>bcprov-jdk15on</artifactId>
  9. <version>1.67</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.bouncycastle</groupId>
  13. <artifactId>bcpkix-jdk15on</artifactId>
  14. <version>1.67</version>
  15. </dependency>

If you use Gradle, add the following content to dependencies:

  1. implementation group: 'io.github.lastincisor', name: 'mysql-connector-java', version: '8.0.29-tidb-1.0.0'
  2. implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.67'
  3. implementation group: 'org.bouncycastle', name: 'bcpkix-jdk15on', version: '1.67'

Java ORM frameworks

Choose Driver or ORM - 图3

Note

  • Currently, Hibernate does not support nested transactions.

  • Since v6.2.0, TiDB supports savepoint. To use the Propagation.NESTED transaction propagation option in @Transactional, that is, to set @Transactional(propagation = Propagation.NESTED), make sure that your TiDB is v6.2.0 or later.

  • Hibernate

  • MyBatis

Support level: Full

To avoid manually managing complex relationships between different dependencies of an application, you can use Gradle or Maven to get all dependencies of your application, including those indirect ones. Note that only Hibernate 6.0.0.Beta2 or above supports the TiDB dialect.

If you are using Maven, add the following to your <dependencies></dependencies>:

  1. <dependency>
  2. <groupId>org.hibernate.orm</groupId>
  3. <artifactId>hibernate-core</artifactId>
  4. <version>6.0.0.CR2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. <version>5.1.49</version>
  10. </dependency>

If you are using Gradle, add the following to your dependencies:

  1. implementation 'org.hibernate:hibernate-core:6.0.0.CR2'
  2. implementation 'mysql:mysql-connector-java:5.1.49'

In addition, you need to specify the TiDB dialect in your Hibernate configuration file: org.hibernate.dialect.TiDBDialect, which is only supported by Hibernate 6.0.0.Beta2 or above. If your Hibernate version is earlier than 6.0.0.Beta2, upgrade it first.

Choose Driver or ORM - 图4

Note

If you are unable to upgrade your Hibernate version, use the MySQL 5.7 dialect org.hibernate.dialect.MySQL57Dialect instead. However, this setting might cause unpredictable results and the absence of some TiDB-specific features, such as sequences.

Support level: Full

To avoid manually managing complex relationships between different dependencies of an application, you can use Gradle or Maven to get all dependencies of your application, including those indirect dependencies.

If you are using Maven, add the following to your <dependencies></dependencies>:

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis</artifactId>
  4. <version>3.5.9</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. <version>5.1.49</version>
  10. </dependency>

If you are using Gradle, add the following to your dependencies:

  1. implementation 'org.mybatis:mybatis:3.5.9'
  2. implementation 'mysql:mysql-connector-java:5.1.49'

For an example of using MyBatis to build a TiDB application, see Build a simple CRUD app with TiDB and MyBatis.

Java client load balancing

tidb-loadbalance

Support level: Full

tidb-loadbalance is a load balancing component on the application side. With tidb-loadbalance, you can automatically maintain the node information of TiDB server and distribute JDBC connections on the client using the tidb-loadbalance policies. Using a direct JDBC connection between the client application and TiDB server has higher performance than using the load balancing component.

Currently, tidb-loadbalance supports the following policies: roundrobin, random, and weight.

Choose Driver or ORM - 图5

Note

tidb-loadbalance must be used with mysql-connector-j.

If you are using Maven, add the following content to the element body of <dependencies></dependencies> in the pom.xml file:

  1. <dependency>
  2. <groupId>io.github.lastincisor</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>8.0.29-tidb-1.0.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.github.lastincisor</groupId>
  8. <artifactId>tidb-loadbalance</artifactId>
  9. <version>0.0.5</version>
  10. </dependency>

If you are using Gradle, add the following content to dependencies:

  1. implementation group: 'io.github.lastincisor', name: 'mysql-connector-java', version: '8.0.29-tidb-1.0.0'
  2. implementation group: 'io.github.lastincisor', name: 'tidb-loadbalance', version: '0.0.5'

Golang

This section describes how to use drivers and ORM frameworks in Golang.

Golang drivers

go-sql-driver/mysql

Support level: Full

To download and configure a Golang driver, refer to the go-sql-driver/mysql documentation.

For an example of how to build a complete application, see Connect to TiDB with Go-MySQL-Driver.

Golang ORM frameworks

GORM

Support level: Full

GORM is a popular ORM framework for Golang. To get all dependencies in your application, you can use the go get command.

  1. go get -u gorm.io/gorm
  2. go get -u gorm.io/driver/mysql

For an example of using GORM to build a TiDB application, see Connect to TiDB with GORM.

Python

This section describes how to use drivers and ORM frameworks in Python.

Python drivers

  • PyMySQL
  • mysqlclient
  • MySQL Connector/Python

Support level: Compatible

You can follow the PyMySQL documentation to download and configure the driver. It is recommended to use PyMySQL 1.0.2 or later versions.

For an example of using PyMySQL to build a TiDB application, see Connect to TiDB with PyMySQL.

Support level: Compatible

You can follow the mysqlclient documentation to download and configure the driver. It is recommended to use mysqlclient 2.1.1 or later versions.

For an example of using mysqlclient to build a TiDB application, see Connect to TiDB with mysqlclient.

Support level: Compatible

You can follow the MySQL Connector/Python documentation to download and configure the driver. It is recommended to use Connector/Python 8.0.31 or later versions.

For an example of using MySQL Connector/Python to build a TiDB application, see Connect to TiDB with MySQL Connector/Python.

Python ORM frameworks

  • Django
  • SQLAlchemy
  • peewee

Support level: Full

Django is a popular Python web framework. To solve the compatibility issue between TiDB and Django, PingCAP provides a TiDB dialect django-tidb. To install it, you can see the django-tidb documentation.

For an example of using Django to build a TiDB application, see Connect to TiDB with Django.

Support level: Full

SQLAlchemy is a popular ORM framework for Python. To get all dependencies in your application, you can use the pip install SQLAlchemy==1.4.44 command. It is recommended to use SQLAlchemy 1.4.44 or later versions.

For an example of using SQLAlchemy to build a TiDB application, see Connect to TiDB with SQLAlchemy.

Support level: Compatible

peewee is a popular ORM framework for Python. To get all dependencies in your application, you can use the pip install peewee==3.15.4 command. It is recommended to use peewee 3.15.4 or later versions.

For an example of using peewee to build a TiDB application, see Connect to TiDB with peewee.

After you have determined the driver or ORM, you can connect to your TiDB cluster.