使用 MyBatis 框架连接 TDSQL PG

最近更新时间:2025-04-28 16:59:42

我的收藏
本节主要介绍如何使用 MyBatis 框架连接 TDSQL PG 数据库,实现数据的增删查改等基本操作。

简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型,将接口和 Java POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

引入和配置 MyBatis 框架

前置依赖

在配置之前需要保证你的机器上已安装对应版本的 JDK,本例是 JDK 8。内核 Oracle 模式下建议使用腾讯自研驱动,请单击 驱动下载
联系数据库管理员获取数据库相关信息:包括数据库 IP、端口、实例名、用户、密码等。驱动名和连接 URL 如下:
驱动名 com.tencentcloud.tdsql.pg.jdbc.Driver
连接 URL(Oracle 模式下需打开 oracle_compile 参数) jdbc:tdsql-pg://host:port/database?oracle_compile=true

创建 Maven 项目

创建 Maven 项目,如下:

注意:
本文档示例项目使用的 IDE 是 IntelliJ IDEA 2022.3 (Ultimate Edition),也可根据喜好选择合适的 IDE。

配置 pom.xml 文件,导入项目依赖

配置文件pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.tencentcloud.tdsql</groupId>
<artifactId>TDSQL_PG_MyBatis</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>

<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<!-- 测试框架Junit5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
<!-- TDSQL-PG JDBC驱动 -->
<dependency>
<groupId>com.tencentcloud.tdsql</groupId>
<artifactId>tdsql-pg-connector-java8</artifactId>
<version>1.1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/tdsql-pg-connector-java8-1.1.0.jar</systemPath>
</dependency>
</dependencies>

</project>
通过 <dependencies> 定义项目所依赖的组件,主要包括:
1. MyBatis 依赖包,填写好后会从公共库自动下载。
2. Junit5 测试框架依赖包,填写好后会从公共库自动下载。
3. 下载 TDSQL PG JDBC 驱动包,并在TDSQL_PG_MyBatis目录下新建lib目录,将驱动包拷贝到lib目录下。
注意:
驱动包下载请单击 驱动下载
本文所有示例需在启用 Oracle 兼容内核的情况下执行。打开内核 Oracle 兼容模式请参考 Oracle 兼容特性概述

配置 MyBatis

TDSQL_PG_MyBatis/src/main/resources目录下新建 mybatis-config.xml 文件,用于配置 MyBatis,mybatis-config.xml 配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置MyBatis运行环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 配置JDBC连接信息:host、port、database、user、password 需要替换为数据库管理员提供的数据库相关信息。 -->
<property name="driver" value="com.tencentcloud.tdsql.pg.jdbc.Driver"/>
<property name="url" value="jdbc:tdsql-pg://host:port/database?oracle_compile=true"/>
<property name="username" value="user"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
</configuration>
其中,需要配置 JDBC 连接信息,仅修改value的值:
driver:指定驱动包名为com.tencentcloud.tdsql.pg.jdbc.Driver
url:指定连接 URL,包括数据库地址、端口、数据库名、连接属性等信息。
username:指定用户名。
password:指定相应用户的密码。
至此,已完成 MyBatis 项目的基本配置,完整的项目目录结构如下图所示:


开发示例

添加数据表对应的实体类

首先,开发使用的数据表为STUDENT表(CREATE TABLE STUDENT(ID INT PRIMARY KEY, NAME VARCHAR(50))),
对应地,添加实体类Student,先在 TDSQL_PG_MyBatis/src/main/java/ 下创建 Package: com.tencentcloud.tdsql.pojo 再在TDSQL_PG_MyBatis/src/main/java/com/tencentcloud/tdsql/pojo下新建 Student.java 文件:
package com.tencentcloud.tdsql.pojo;

public class Student {
private int id;
private String name;

public Student() {
}

public Student(int id, String name) {
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}

定义数据库操作接口

其次,在 TDSQL_PG_MyBatis/src/main/java/ 下创建 Package: com.tencentcloud.tdsql.mapper 再在TDSQL_PG_MyBatis/src/main/java/com/tencentcloud/tdsql/mapper下新建StudentMapper.java文件,定义数据库的增删查改接口,如下:
package com.tencentcloud.tdsql.mapper;

import com.tencentcloud.tdsql.pojo.Student;
import java.util.List;

public interface StudentMapper {
// 插入
Integer insertStudent(Student student);

// 查询
List<Student> selectAllStudent();

// 更新
Integer updateStudentById(Student student);

// 删除
Integer deleteStudentById(Integer id);
}

配置操作接口与对应 SQL 语句的映射关系

然后,需要将数据库的增删查改接口映射到对应的 SQL 语句,在 TDSQL_PG_MyBatis/src/main/resources/ 下创建目录 com/tencentcloud/tdsql/mapper
再在TDSQL_PG_MyBatis/src/main/resources/com/tencentcloud/tdsql/mapper下新建StudentMapper.xml映射文件,如下:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 定义命名空间,对应接口类StudentMapper -->
<mapper namespace="com.tencentcloud.tdsql.mapper.StudentMapper">
<insert id="insertStudent" parameterType="com.tencentcloud.tdsql.pojo.Student">
insert into STUDENT (ID, NAME) values (#{id}, #{name})
</insert>
<select id="selectAllStudent" resultType="com.tencentcloud.tdsql.pojo.Student">
select * from STUDENT order by ID
</select>
<update id="updateStudentById" parameterType="com.tencentcloud.tdsql.pojo.Student">
update STUDENT set NAME = #{name} where ID = #{id}
</update>
<delete id="deleteStudentById" parameterType="java.lang.Integer">
delete from STUDENT where ID = #{id};
</delete>
</mapper>
其中,定义四个 SQL 语句,分别对应了StudentMapper接口类的增删查改接口:
insertStudent:向STUDENT表中插入一条记录,包括IDNAME两个字段,值分别为#{id}#{name},传入的参数类型则为com.tencentcloud.tdsql.pojo.Student
selectAllStudent:从STUDENT表中查询所有记录,返回的结果类型为com.tencentcloud.tdsql.pojo.Student
updateStudentById:根据ID字段去更新相应记录的NAME字段,值分别为#{id}#{name},传入的参数类型为com.tencentcloud.tdsql.pojo.Student
deleteStudentById:根据ID字段删除相应的记录,值为#{id},传入的参数类型为java.lang.Integer
同时,需要将StudentMapper.xml映射文件的路径写入到 MyBatis 配置文件mybatis-config.xml中,如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置MyBatis运行环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 配置JDBC连接信息:host、port、database、user、password 需要替换为数据库管理员提供的数据库相关信息。 -->
<property name="driver" value="com.tencentcloud.tdsql.pg.jdbc.Driver"/>
<property name="url" value="jdbc:tdsql-pg://host:port/database?oracle_compile=true"/>
<property name="username" value="user"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<!-- 增加Mapper映射文件 -->
<mappers>
<mapper resource="com/tencentcloud/tdsql/mapper/StudentMapper.xml"/>
</mappers>
</configuration>

测试

最后,在TDSQL_PG_MyBatis/src/test/java下添加测试类TestStudent,展示了基本的增删查改功能,如下:
import com.tencentcloud.tdsql.mapper.StudentMapper;
import com.tencentcloud.tdsql.pojo.Student;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 org.junit.jupiter.api.Test;

public class TestStudent {
@Test
public void test() throws IOException {
// 加载MyBatis配置
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 创建factory实例,用于管理SqlSession
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建SqlSession实例,可以执行SQL语句、提交或回滚等操作
SqlSession session = factory.openSession();
// 获取StudentMapper接口的实例
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
System.out.println("------插入数据------");
studentMapper.insertStudent(new Student(1, "Alex"));
studentMapper.insertStudent(new Student(2, "Bob"));
studentMapper.insertStudent(new Student(3, "John"));
// commit
session.commit();
System.out.println("插入3条数据");

System.out.println("------查询数据------");
List<Student> students1 = studentMapper.selectAllStudent();
for (Student student: students1) {
System.out.println(student);
}

System.out.println("------更改数据------");
studentMapper.updateStudentById(new Student(1, "Alice"));
// commit
session.commit();
System.out.println("更改id为1的数据");

System.out.println("------查询数据------");
List<Student> students2 = studentMapper.selectAllStudent();
for (Student student: students2) {
System.out.println(student);
}

System.out.println("------删除数据------");
studentMapper.deleteStudentById(2);
// commit
session.commit();
System.out.println("删除id为2的数据");

System.out.println("------查询数据------");
List<Student> students3 = studentMapper.selectAllStudent();
for (Student student: students3) {
System.out.println(student);
}

session.close();
}
}
运行结果如下:
------插入数据------
插入3条数据
------查询数据------
Student [id=1, name=Alex]
Student [id=2, name=Bob]
Student [id=3, name=John]
------更改数据------
更改id为1的数据
------查询数据------
Student [id=1, name=Alice]
Student [id=2, name=Bob]
Student [id=3, name=John]
------删除数据------
删除id为2的数据
------查询数据------
Student [id=1, name=Alice]
Student [id=3, name=John]

附:项目结构

至此,完成了 MyBatis 项目的配置和开发示例,项目的整体结构如下图所示: