【我和 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 用户
3.连接数据库
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@123”,且密码不显示。
2.创建数据库
1.创建 my_db 数据库
2.查看数据库
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;
@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
复制代码
进入主界面以后可以进行图书的增删改查操作,下面演示图书的增加,点击“新建”按钮,输入图书信息点击确定
显示图书添加成功
数据库中也可查询到该条数据
四:总结
平时做项目用的都是 MySQL 较多,今天尝试了一下将 openGauss 作为数据库进行项目的数据存储,总的体验效果感觉还不错,包括存储速度以及连接简易性等,如果已经在电脑中配置好了 openGauss 环境,完全可以考虑将 openGauss 作为项目数据库来使用。但是不足的地方在于 openGauss 只支持在 Linux 进行安装,而平时我们使用最多的是 Windows 系统,所以对于个人用户来说使用不是那么方便,另外 openGauss 的连接工具 Data Studio 的功能还不够完善,可以对照 Navicat 进行改进,相信这样能更好提升使用体验。
评论