写点什么

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

作者:daydayup
  • 2023-08-09
    北京
  • 本文字数:4295 字

    阅读完需:约 14 分钟

【我和 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
复制代码


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

1.创建用户

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


1.进入容器


docker exec -it opengauss /bin/bash
复制代码


2.切换 omm 用户


su omm
复制代码


3.连接数据库


gsql -d postgres -p 5432
复制代码



4.创建新用户


CREATE USER gauss WITH Sysadmin IDENTIFIED BY 'OpenGauss@123';
复制代码



执行上述命令后将在 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;
复制代码



6.切换用户


openGauss=# \c - gauss
复制代码



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

2.创建数据库

1.创建 my_db 数据库


CREATE DATABASE my_db;
复制代码


2.查看数据库


openGauss=> \l
复制代码


3.使用 Data Studio 连接 openGauss

1.下载安装


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



2.连接数据库


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


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



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


三:项目实战

1.创建表

创建如下 tbl_book 表




2.创建项目

1.创建如下 SpringBoot 项目结构



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;
@Mapperpublic 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;
@Servicepublic 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
复制代码



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



显示图书添加成功



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


四:总结

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

用户头像

daydayup

关注

还未添加个人签名 2023-07-18 加入

还未添加个人简介

评论

发布
暂无评论
【我和openGauss的故事】SpringBoot连接openGauss项目实战_daydayup_InfoQ写作社区