一、简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型,将接口和 Java POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
二、前置依赖
在配置之前需要保证你的机器上已安装对应版本的 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目录下。
五、配置 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表中插入一条记录,包括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 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 项目的配置和开发示例,项目的整体结构如下: