Spring Boot 整合华为 GaussDB 企业版

发布于:2025-06-26 ⋅ 阅读:(14) ⋅ 点赞:(0)

非常好!下面是一个基于 Spring Boot + MyBatis-Plus 3.5.7 + PageHelper 分页 + 华为 GaussDB(Zenith) 的完整示例项目结构,包含:

  • Maven 依赖
  • application.yml
  • MyBatis-Plus 和 PageHelper 分页共存配置
  • 完整的实体、Mapper、Service、Controller
  • 分页接口示例

✅ 项目结构

src
└── main
    ├── java
    │   └── com.example.gaussdemo
    │       ├── GaussDemoApplication.java
    │       ├── config
    │       │   ├── MybatisPlusConfig.java
    │       │   └── PageHelperConfig.java
    │       ├── controller
    │       │   └── UserController.java
    │       ├── entity
    │       │   └── User.java
    │       ├── mapper
    │       │   └── UserMapper.java
    │       └── service
    │           └── UserService.java
    ├── resources
    │   ├── application.yml
    │   └── mapper
    │       └── UserMapper.xml

✅ Maven 依赖 pom.xml

<dependencies>
    <!-- Spring Boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- MyBatis-Plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.7</version>
    </dependency>

    <!-- PageHelper -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.4.7</version>
    </dependency>

    <!-- Druid 数据库连接池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.20</version>
    </dependency>

    <!-- 华为 GaussDB JDBC 驱动 -->
    <dependency>
        <groupId>com.huawei.gauss</groupId>
        <artifactId>zenith-driver</artifactId>
        <version>21.0.0</version>
    </dependency>
</dependencies>

application.yml

spring:
  datasource:
    driver-class-name: com.huawei.gauss.jdbc.ZenithDriver
    url: jdbc:zenith:@127.0.0.1:1888
    username: gauss_user
    password: gauss_password
    type: com.alibaba.druid.pool.DruidDataSource

mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.example.gaussdemo.entity

✅ MyBatis-Plus 分页配置 MybatisPlusConfig.java

package com.example.gaussdemo.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.example.gaussdemo.mapper")
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

✅ PageHelper 分页配置 PageHelperConfig.java

package com.example.gaussdemo.config;

import com.github.pagehelper.PageInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

@Configuration
public class PageHelperConfig {
    @Bean
    public PageInterceptor pageInterceptor() {
        PageInterceptor interceptor = new PageInterceptor();
        Properties properties = new Properties();
        properties.setProperty("helperDialect", "postgresql");
        properties.setProperty("reasonable", "true");
        interceptor.setProperties(properties);
        return interceptor;
    }
}

🔸 GaussDB 使用 postgresql 方言


✅ 实体类 User.java

package com.example.gaussdemo.entity;

import lombok.Data;

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
}

✅ Mapper 接口 UserMapper.java

package com.example.gaussdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.gaussdemo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper extends BaseMapper<User> {

    // PageHelper 分页示例
    @Select("SELECT id, name, age FROM demo_schema.users")
    List<User> selectAllUsers();
}

✅ Mapper XML(MyBatis-Plus 不需要也可以,PageHelper 也支持注解)

如果用 XML,路径 resources/mapper/UserMapper.xml

<?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="com.example.gaussdemo.mapper.UserMapper">

</mapper>

✅ Service 层 UserService.java

package com.example.gaussdemo.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.gaussdemo.entity.User;
import com.example.gaussdemo.mapper.UserMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    private final UserMapper userMapper;

    public UserService(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    // MyBatis-Plus 分页
    public Page<User> getUsersByPlus(int pageNum, int pageSize) {
        return userMapper.selectPage(new Page<>(pageNum, pageSize), new QueryWrapper<>());
    }

    // PageHelper 分页
    public PageInfo<User> getUsersByPageHelper(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<User> list = userMapper.selectAllUsers();
        return new PageInfo<>(list);
    }
}

✅ Controller 层 UserController.java

package com.example.gaussdemo.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.gaussdemo.entity.User;
import com.example.gaussdemo.service.UserService;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/users")
public class UserController {

    private final UserService userService;
    public UserController(UserService userService) {
        this.userService = userService;
    }

    // MyBatis-Plus 分页接口
    @GetMapping("/plus")
    public Page<User> getUsersByPlus(@RequestParam int pageNum, @RequestParam int pageSize) {
        return userService.getUsersByPlus(pageNum, pageSize);
    }

    // PageHelper 分页接口
    @GetMapping("/pagehelper")
    public PageInfo<User> getUsersByPageHelper(@RequestParam int pageNum, @RequestParam int pageSize) {
        return userService.getUsersByPageHelper(pageNum, pageSize);
    }
}

✅ 数据库建表示例

CREATE SCHEMA demo_schema;

CREATE TABLE demo_schema.users (
    id BIGINT PRIMARY KEY,
    name VARCHAR(100),
    age INT
);

INSERT INTO demo_schema.users (id, name, age) VALUES
(1, 'Alice', 30),
(2, 'Bob', 25),
(3, 'Charlie', 28),
(4, 'David', 35);

✅ 启动访问测试

➤ MyBatis-Plus 分页接口:

http://localhost:8080/api/users/plus?pageNum=1&pageSize=2

➤ PageHelper 分页接口:

http://localhost:8080/api/users/pagehelper?pageNum=1&pageSize=2

🚀 🔥 总结

分页插件 优点 缺点
MyBatis-Plus 集成度高,原生支持,语法优雅 只能用于 MyBatis-Plus API
PageHelper 通用分页工具,支持 MyBatis 和注解 依赖 ThreadLocal,容易误用

✅ PageHelper 的 application.yml 配置示例

pagehelper:
  helperDialect: postgresql      # GaussDB 企业版使用 postgresql 方言
  reasonable: true               # 分页合理化:页码<=0 时查询第一页,页码>=总页数时查询最后一页
  supportMethodsArguments: true  # 支持通过 Mapper 接口参数传递分页参数
  params: count=countSql         # 查询总数的参数
  rowBoundsWithCount: true       # 使用 RowBounds 分页时同时进行 count 查询

🔧 各参数含义

配置项 默认值 说明
helperDialect mysql 数据库方言(MySQL、MariaDB、Oracle、PostgreSQL、SQLServer、H2、sqlite、GaussDB 用 postgresql)
reasonable false 合理化分页,页码<=0 查询第一页,页码>=总页数查询最后一页
supportMethodsArguments false 支持通过方法参数传递 pageNum 和 pageSize
params count 查询的映射参数,比如 count=countSql
rowBoundsWithCount false 是否支持 RowBounds 进行 count 查询

🚀 完整 application.yml 示例(包含数据源)

spring:
  datasource:
    driver-class-name: com.huawei.gauss.jdbc.ZenithDriver
    url: jdbc:zenith:@127.0.0.1:1888
    username: gauss_user
    password: gauss_password
    type: com.alibaba.druid.pool.DruidDataSource

pagehelper:
  helperDialect: postgresql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql
  rowBoundsWithCount: true

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.gaussdemo.entity

✅ 使用示例(无需额外配置)

PageHelper.startPage(1, 5);
List<User> users = userMapper.selectAllUsers();
PageInfo<User> pageInfo = new PageInfo<>(users);

🔥 结论

  • ✅ 配置简单,推荐使用 YAML 进行集中配置。
  • ✅ GaussDB 企业版直接使用 helperDialect: postgresql
  • ✅ 对于 Spring Boot,PageHelper 会自动根据 application.yml 完成初始化,无需额外 @Bean

网站公告

今日签到

点亮在社区的每一天
去签到