本节主要介绍如何使用 MyBatis 框架连接 TDSQL PG 数据库,实现数据的增删查改等基本操作。
简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型,将接口和 Java POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
引入和配置 MyBatis 框架
前置依赖
联系数据库管理员获取数据库相关信息:包括数据库 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
目录下。配置 MyBatis
在
TDSQL_PG_MyBatis/src/main/resources
目录下新建 mybatis-config.xml
文件,用于配置 MyBatis,mybatis-config.xml
配置如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//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;}@Overridepublic 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 mapperPUBLIC "-//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
表中插入一条记录,包括ID
和NAME
两个字段,值分别为#{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 configurationPUBLIC "-//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 {@Testpublic void test() throws IOException {// 加载MyBatis配置InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");// 创建factory实例,用于管理SqlSessionSqlSessionFactory 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"));// commitsession.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"));// commitsession.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);// commitsession.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 项目的配置和开发示例,项目的整体结构如下图所示:
