本文源码:GitHub·点这里 || GitEE·点这里

一、PostgreSQL简介

1、和MySQL的比较

PostgreSQL是一个功能强大的且开源关系型数据库系统,在网上PostgreSQL和MySQL一直有大量的对比分析。大多从性能,开源协议,SQL标准,开发难度等去比较,只要有比较就会有差距和差异,看看就好。

絮叨一句:编程世界里的对比是一直存在的,但是无论对比结果如何,当业务需要的时候,该用还是要用。MySQL和PostgreSQL对比很少占上风,但是MySQL在国内的使用依旧广泛。

2、PostgreSQL特性

  • 多副本同步复制,满足金融级可靠性要求;
  • 支持丰富的数据类型,除了常见基础的,还包括文本,图像,声音,视频,JSON等;
  • 自带全文搜索功能,可以简化搜索功能实现流程;
  • 高效处理图结构, 轻松实现"朋友的朋友的朋友"关系类型;
  • 地理信息处理扩展,支持地图寻路相关业务;

二、开发环境整合

1、基础依赖

导入依赖包,版本会自动加载。本案例加载的是42.2.6版本号。

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

2、核心配置文件

这里使用Druid连接池管理。

spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driverClassName: org.postgresql.Driver
url: jdbc:postgresql://127.0.0.1:5432/db_01
username: root01
password: 123456

3、连接池配置

@Configuration
public class DruidConfig { @Value("${spring.datasource.druid.url}")
private String dbUrl;
@Value("${spring.datasource.druid.username}")
private String username;
@Value("${spring.datasource.druid.password}")
private String password;
@Value("${spring.datasource.druid.driverClassName}")
private String driverClassName; @Bean
public DruidDataSource dataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
return datasource;
}
}

4、持久层配置

基于mybatis相关组件,在用法上和MySQL环境整合基本一致。

mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
typeAliasesPackage: com.post.gresql.*.entity
global-config:
db-config:
id-type: AUTO
field-strategy: NOT_NULL
logic-delete-value: -1
logic-not-delete-value: 0
banner: false
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'

5、基础测试案例

提供一个数据查询,写入,分页查的基础使用案例。

@Api(value = "UserController")
@RestController
public class UserController { @Resource
private UserService userService ; @GetMapping("/selectById")
public UserEntity selectById (Integer id){
return userService.selectById(id) ;
} @PostMapping("/insert")
public Integer insert (UserEntity userEntity){
return userService.insert(userEntity) ;
} @GetMapping("/pageQuery")
public PageInfo<UserEntity> pageQuery (@RequestParam("page") int page){
int pageSize = 3 ;
return userService.pageQuery(page,pageSize) ;
}
}

三、JSON类型使用

PostgreSQL支持JSON数据类型格式,但是在用法上与一般数据类型有差异。

1、Json表字段创建

这里字段user_list为JSON类型,存储场景第一批用户有哪些,第二批用户有哪些,依次类推。

CREATE TABLE pq_user_json (
ID INT NOT NULL,
title VARCHAR (32) NOT NULL,
user_list json NOT NULL,
create_time TIMESTAMP (6) DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "user_json_pkey" PRIMARY KEY ("id")
);

2、类型转换器

定义一个数据库与实体对象的转换器,主要就是JSON数据和Java对象的转换。

@MappedTypes({Object.class})
public class JsonTypeHandler extends BaseTypeHandler<Object> { private static final PGobject jsonObject = new PGobject(); @Override
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
jsonObject.setType("json");
jsonObject.setValue(parameter.toString());
ps.setObject(i, jsonObject);
} @Override
public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
return JSON.parseObject(rs.getString(columnName), Object.class);
} @Override
public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return JSON.parseObject(rs.getString(columnIndex), Object.class);
} @Override
public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return JSON.parseObject(cs.getString(columnIndex), Object.class);
}
}

3、调用方法

指定字段的映射类型typeHandler即可。

<mapper namespace="com.post.gresql.mapper.UserJsonMapper" >

    <insert id="addUserJson" parameterType="com.post.gresql.entity.UserJsonEntity">
INSERT INTO pq_user_json (id,title,user_list,create_time)
VALUES (#{id}, #{title}, #{userList, typeHandler=com.post.gresql.config.JsonTypeHandler}, #{createTime})
</insert> </mapper>

4、JSON格式测试

JSON格式数据入库,出库查询。

@RestController
public class UserJsonController { @Resource
private UserJsonService userJsonService ; @GetMapping("/addUserJson")
public boolean addUserJson (){
List<UserEntity> userEntities = new ArrayList<>() ;
UserEntity userEntity1 = new UserEntity(1,"LiSi",22,new Date());
UserEntity userEntity2 = new UserEntity(2,"WangWu",23,new Date());
userEntities.add(userEntity1);
userEntities.add(userEntity2);
UserJsonEntity userJsonEntity = new UserJsonEntity();
userJsonEntity.setId(1);
userJsonEntity.setTitle("第一批名单");
userJsonEntity.setUserList(JSON.toJSONString(userEntities));
userJsonEntity.setCreateTime(new Date());
return userJsonService.addUserJson(userJsonEntity) ;
} @GetMapping("/findUserJson")
public List<UserEntity> findUserJson (@RequestParam("id") Integer id){
UserJsonEntity userJsonEntity = userJsonService.findUserJson(id) ;
return JSON.parseArray(userJsonEntity.getUserList(),UserEntity.class) ;
}
}

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/data-manage-parent
GitEE·地址
https://gitee.com/cicadasmile/data-manage-parent

推荐阅读:数据管理

序号 标题
01 数据源管理:主从库动态路由,AOP模式读写分离
02 数据源管理:基于JDBC模式,适配和管理动态数据源
03 数据源管理:动态权限校验,表结构和数据迁移流程
04 数据源管理:关系型分库分表,列式库分布式计算

数据源管理 | PostgreSQL环境整合,JSON类型应用的更多相关文章

  1. postgresql模糊查询json类型字段内某一属性值

    需求场景: 目录以jsonb格式存储在数据库表t的chapter字段中,需要菜单路径中包含指定字符串(比如“语文”或者“上学期”)的menu 以下为chapter字段存储json示例: { " ...

  2. 使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段

    业务扩展字段在PostgreSQL数据库中经常会使用json格式的数据来存储,然而mybatis默认是没有实现json类型字段对应的TypeHandler,所以一般我们需要自定义mybatis的Typ ...

  3. 数据源管理 | Kafka集群环境搭建,消息存储机制详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Kafka集群环境 1.环境版本 版本:kafka2.11,zookeeper3.4 注意:这里zookeeper3.4也是基于集群模式部 ...

  4. 数据源管理 | 基于DataX组件,同步数据和源码分析

    本文源码:GitHub·点这里 || GitEE·点这里 一.DataX工具简介 1.设计理念 DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDF ...

  5. 数据源管理 | OLAP查询引擎,ClickHouse集群化管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.列式库简介 ClickHouse是俄罗斯的Yandex公司于2016年开源的列式存储数据库(DBMS),主要用于OLAP在线分析处理查询, ...

  6. 数据源管理 | 搜索引擎框架,ElasticSearch集群模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.集群环境搭建 1.环境概览 ES版本6.3.2,集群名称esmaster,虚拟机centos7. 服务群 角色划分 说明 en-maste ...

  7. 数据源管理 | 分布式NoSQL系统,Cassandra集群管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.Cassandra简介 1.基础描述 Cassandra是一套开源分布式NoSQL数据库系统.它最初由Facebook开发,用于储存收件箱 ...

  8. Spring 和 MyBatis 环境整合

    本案例主要是讲述Spring  和  MyBatis 的环境整合 , 对页面功能的实现并没有做的很完整 先附上本案例的结构 1 . 创建项目并导入相关jar包 commons-collections4 ...

  9. PHP+lghttpd + postgresql 环境搭建

    PHP+lghttpd + postgresql 环境搭建 Linux 下PHP环境搭建 安装环境:PHP+lghttpd + postgresql 1:yum install lighttpd 红旗 ...

随机推荐

  1. 使用 PyTorch 进行 风格迁移(Neural-Transfer)

    1.简介 本教程主要讲解如何实现由 Leon A. Gatys,Alexander S. Ecker和Matthias Bethge提出的Neural-Style 算法.Neural-Style 或者 ...

  2. Jmeter接口测试之案例实战(十一)

    在前面的知识体系中详细的介绍了Jmeter测试工具在接口自动化测试中的基础知识,那么今天更新的文章主要是对昨晚的上课内容做个总结. 首先来看Jmeter测试工具在图片上传中的案例应用.首先结合互联网产 ...

  3. GIS中地图投影的定义

    我国的基本比例尺地形图[1:5千.1:1万.1:2.5万.1:5万.1:10万.1:25万.1:50万.1:100万]中,大于等于50万的均采用高斯-克吕格投影[Gauss-Kruger]:小于50万 ...

  4. 【Redis】入门

    Redis概述 Redis常用数据结构 Redis删除过期数据策略 Redis内存淘汰机制 Redis持久化机制 缓存问题及解决方案 Redis概述  Redis是一个开源的.基于内存的数据结构存储器 ...

  5. 模块 psutil 系统信息获取

    psutil模块介绍 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取 ...

  6. Linux(Ubuntu)与windows实现文件共享

    步骤:1.从网上下载VMware和Ubuntu的镜像文件 2.在虚拟机上安装Ubuntu系统 3.在安装好的系统中安装VMware tools 实现文件共享    4.在VMware中设置与windo ...

  7. Appium自动化(2) - appium环境安装常见问题的解决方案

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 问题1:adb检测不到设备 解决 ...

  8. PTA数据结构与算法题目集(中文) 7-10

    PTA数据结构与算法题目集(中文)  7-10 7-10 公路村村通 (30 分)   现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低 ...

  9. 浅谈Java参数传递机制

    Java参数传递 ​ 才疏学浅,今天才知道Java中方法的参数是可以传递对象引用进去的. ​ Java的参数传递机制很简单,其实就是值传递. ​ 所谓值传递,也就是我们在给方法传递一个参数的时,传递的 ...

  10. Android | 教你如何开发扫二维码功能

    前言   最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗 ...