【我和openGauss的故事】SpringBoot连接openGauss项目实战
  lYE0sTgD5uUi 2023年11月02日 33 0

【我和openGauss的故事】SpringBoot连接openGauss项目实战

土豆虫 [openGauss](javascript:void(0);) 2023-08-07 18:00 发表于中国香港

一:Docker安装openGauss

1.下载openGauss

安装好Docker好以后,执行如下命令下载openGauss3.0镜像。

docker pull enmotech/opengauss:3.0.0

【我和openGauss的故事】SpringBoot连接openGauss项目实战_spring

2.运行openGauss

执行如下命令

docker run -itd --name opengauss \
--restart=always \
--privileged=true \
-e GS_PASSWORD=OpenGauss@123 \
-v /home/opengauss:/var/lib/opengauss \
-u root \
-p 5432:5432 \
enmotech/opengauss:3.0.0

【我和openGauss的故事】SpringBoot连接openGauss项目实战_spring_02

二:使用openGauss

1.创建用户

安装好openGauss后会自动创建一个默认用户omm,但是该用户不能用于远程连接,必须创建一个新用户,用于数据连接。

1.进入容器

docker exec -it opengauss /bin/bash

2.切换omm用户

su omm

3.连接数据库

gsql -d postgres -p 5432

【我和openGauss的故事】SpringBoot连接openGauss项目实战_Code_03

4.创建新用户

CREATE USER gauss WITH Sysadmin IDENTIFIED BY 'OpenGauss@123';

【我和openGauss的故事】SpringBoot连接openGauss项目实战_spring_04

执行上述命令后将在postgres下创建用户gauss。

5.给用户授权

GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO gauss;
GRANT USAGE,SELECT ON ALL SEQUENCES IN SCHEMA gauss TO gauss;

【我和openGauss的故事】SpringBoot连接openGauss项目实战_Code_05

6.切换用户

openGauss=# \c - gauss

【我和openGauss的故事】SpringBoot连接openGauss项目实战_java_06

注意:输入命令后需要输入密码,密码为前面设置的“openGauss@123”,且密码不显示。

2.创建数据库

1.创建my_db数据库

CREATE DATABASE my_db;

2.查看数据库

openGauss=> \l

【我和openGauss的故事】SpringBoot连接openGauss项目实战_Code_07

3.使用Data Studio连接openGauss

1.下载安装

可以到openGauss官网下载安装Data Studio进行使用(注意版本对应)。

【我和openGauss的故事】SpringBoot连接openGauss项目实战_spring_08

2.连接数据库

打开Data Studio后输入连接信息(注意自己的主机号)

名称:mygauss-conn
主机名:192.168.108.200
端口号:5432
数据库:postgres
用户名:ga_mason
密码:OpenGauss@123

【我和openGauss的故事】SpringBoot连接openGauss项目实战_Code_09

连接成功后跳转至如下界面,可以查看创建表。

【我和openGauss的故事】SpringBoot连接openGauss项目实战_java_10

三:项目实战

1.创建表

创建如下tbl_book表

【我和openGauss的故事】SpringBoot连接openGauss项目实战_Code_11

【我和openGauss的故事】SpringBoot连接openGauss项目实战_Code_12

【我和openGauss的故事】SpringBoot连接openGauss项目实战_spring_13

2.创建项目

1.创建如下SpringBoot项目结构

【我和openGauss的故事】SpringBoot连接openGauss项目实战_Code_14

2.部分项目文件

①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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.my</groupId>
    <artifactId>openGaussPro</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>openGaussPro</name>
    <description>openGaussPro</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

②application.yml

spring:
  datasource:
    # config mysql
    url: jdbc:postgresql://192.168.132.128:5432/my_db
    username: gauss
    password: OpenGauss@123
    driver-class-name: org.postgresql.Driver

③Book.java

package com.my.pojo;

public class Book {
    private String id;
    private String type;
    private String name;
    private String description;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", type='" + type + '\'' +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }

    public String getId() {
        return id;
    }

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

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

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

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

④BookController.java

package com.my.controller;

import com.my.common.Code;
import com.my.common.Result;
import com.my.exception.BusinessException;
import com.my.pojo.Book;
import com.my.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.UUID;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;

    @PostMapping
    public Result save(@RequestBody Book book) {
        book.setId(UUID.randomUUID().toString());
        boolean flag = bookService.save(book);
        return new Result(flag? Code.SAVE_OK:Code.SAVE_ERR,flag);
    }

    @PutMapping
    public Result update(@RequestBody Book book) {
        boolean flag = bookService.update(book);
        return new Result(flag?Code.UPDATE_OK:Code.SAVE_ERR,flag);
    }

    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
        boolean flag = bookService.delete(id);
        return new Result(flag?Code.DELETE_OK:Code.DELETE_ERR,flag);
    }

    @GetMapping
    public Result getAll() {
        List<Book> bookList = bookService.getAll();
        Integer code = (bookList == null ? Code.GET_ERR:Code.GET_OK);
        String msg = (bookList == null? "数据查询失败!":"");
        return new Result(code,bookList,msg);
    }

    @GetMapping(value = ("/getByName"))
    public Result getByName(@RequestParam("name") String name){
        List<Book> bookList = bookService.getByName(name);
        Integer code = (bookList == null ? Code.GET_ERR:Code.GET_OK);
        String msg = (bookList == null? "系统繁忙,请稍后再试!":"");
        return new Result(code,bookList,msg);
    }
}

⑤BookDao.java

package com.my.dao;

import com.my.pojo.Book;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface BookDao {
    @Insert("insert into tbl_book values(#{id},#{type},#{name},#{description})")
    int save(Book book);

    @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
    int update(Book book);

    @Delete("delete from tbl_book where id = #{id}")
    int delete(Integer id);

    @Select("select * from tbl_book")
    List<Book> getAll();

    @Select("select * from tbl_book where name like concat('%',#{name},'%')")
    List<Book> selectByName(String name);
}

⑥BookServiceImpl.java

package com.my.service.impl;

import com.my.dao.BookDao;
import com.my.pojo.Book;
import com.my.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;

    @Override
    public boolean save(Book book) {
        return bookDao.save(book) > 0;
    }

    @Override
    public boolean update(Book book) {
        return bookDao.update(book) > 0;
    }

    @Override
    public boolean delete(Integer id) {
        return bookDao.delete(id) > 0;
    }

    @Override
    public List<Book> getAll() {
        return bookDao.getAll();
    }

    @Override
    public List<Book> getByName(String name) {
        return bookDao.selectByName(name);
    }
}

3.项目运行

点击openGaussProApplication.java并运行main方法,浏览器输入

localhost:8080/pages/books.html

【我和openGauss的故事】SpringBoot连接openGauss项目实战_spring_15

进入主界面以后可以进行图书的增删改查操作,下面演示图书的增加,点击“新建”按钮,输入图书信息点击确定

【我和openGauss的故事】SpringBoot连接openGauss项目实战_java_16

显示图书添加成功

【我和openGauss的故事】SpringBoot连接openGauss项目实战_spring_17

数据库中也可查询到该条数据

【我和openGauss的故事】SpringBoot连接openGauss项目实战_Code_18

四:总结

平时做项目用的都是MySQL较多,今天尝试了一下将openGauss作为数据库进行项目的数据存储,总的体验效果感觉还不错,包括存储速度以及连接简易性等,如果已经在电脑中配置好了openGauss环境,完全可以考虑将openGauss作为项目数据库来使用。但是不足的地方在于openGauss只支持在Linux进行安装,而平时我们使用最多的是Windows系统,所以对于个人用户来说使用不是那么方便,另外openGauss的连接工具Data Studio的功能还不够完善,可以对照Navicat进行改进,相信这样能更好提升使用体验。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  3I1N9ysrcSyk   2023年12月08日   31   0   0 javahapi数据交换
  DF5J4hb0hcmT   2023年12月07日   51   0   0 javaArthas
lYE0sTgD5uUi