更新时间:2024-09-13 GMT+08:00

使用MyBatis连接数据库

MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,其避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

本章节指导用户使用MyBatis连接GaussDB示例的配置依赖和配置文件。

配置pom依赖

<dependency>
    <groupId>com.huaweicloud.gaussdb</groupId>
    <artifactId>opengaussjdbc</artifactId>
    <version>503.2.T35</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

配置pom依赖时,需要提前配置好maven环境。

配置文件

配置mybatis-config.xml资源文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置文件的根元素 -->
<configuration>
    <!--配置全局属性-->
    <settings>
        <!--使用jdbc的getGeneratedKeys获取数据库自增主键值-->
        <setting name="useGeneratedKeys" value="true"/>
        <!--使用列标签替换列别名 默认为true-->
        <setting name="useColumnLabel" value="true" />
        <!--开启驼峰式命名转换:Table{create_time} -> Entity{createTime}-->
        <setting name="mapUnderscoreToCamelCase" value="true" />
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.huawei.opengauss.jdbc.Driver"/>
                <property name="url" value="jdbc:opengauss://***.***.***.***(需要替换为数据库ip):20000(需要替换为数据库端口)/test?(test需要替换为对应的database)connectionTimeout=10"/>
                <property name="username" value="***(需要替换为正确的用户名)"/>
                <property name="password" value="*******(需要替换为正确的密码)"/>
            </dataSource>
        </environment>
    </environments>
    <!--注册 mapper(mapper.xml 所在地址)-->
    <mappers>
        <mapper resource="mapper/StudentDaoMapper.xml"></mapper>
    </mappers>
</configuration>

示例

  1. 测试实体类StudentEntity.java(com.huawei.entity路径下):
    public class StudentEntity {
        Integer id;
        String name;
    }
  2. 实体类对应的StudentDaoMapper.xml文件(resources.mapper路径下):
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="StudentMapper">
        <!-- 根据主键查询-->
        <select id="getList" resultType="com.huawei.entity.StudentEntity" >
            select * from student;
        </select>
    </mapper>
  3. 查询表测试方法:
    @Test
    public void mainTest() throws IOException {
        // 1.读取mybatis的核心配置文件(mybatis-config.xml)
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        // 2.通过配置信息获取一个SqlSessionFactory工厂对象
        SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
        // 3.通过工厂获取一个SqlSession对象
        SqlSession session = fac.openSession();
        // 4.通过namespace+id找到要执行的SQL语句并执行SQL语句
        List<StudentEntity> list = session.selectList("StudentMapper.getList");
        // 5.输出结果
        list.forEach(i -> {
            System.out.println(i.toString());
        });
    }
  4. 查询结果日志:
    图1 查询结果日志

目前MybatisPlus插件中PaginationInnerInterceptor未对GaussDB驱动做适配。创建PaginationInnerInterceptor对象时指定DbType为POSTGRE_SQL即可解决。eg: PaginationInnerInterceptor innerInterceptor = new PaginationInnerInterceptor(DbType.POSTGRE_SQL)。