您的当前位置:首页数据源管理 | PostgreSQL环境整合,JSON类型应用

数据源管理 | PostgreSQL环境整合,JSON类型应用

2023-11-13 来源:哗拓教育
本文源码: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、连接池配置
    @Configurationpublic 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")@RestControllerpublic 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格式数据入库,出库查询。

    @RestControllerpublic 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-parentGitEE·地址https://gitee.com/cicadasmile/data-manage-parent

    技术图片

    推荐阅读:数据管理

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

    数据源管理 | PostgreSQL环境整合,JSON类型应用

    标签:asm   哪些   bean   service   持久层   banner   current   auto   自动加载   

    小编还为您整理了以下内容,可能对您也有帮助:

    如何使用PostgreSQL中的JSONB数据类型

    ostgreSQL 9.4 正在加载一项新功能叫jsonb,是一种新型资料,可以储存支援GIN索引的JSON 资料。换言之,此功能,在即将来临的更新中最重要的是,如果连这都不重要的话,那就把Postgres 置于文件为本数据库系统的推荐位置吧。

    自从9.2开始,一个整合JSON 资料类型已经存在,带有一整套功能(例如资料产生和资料解构功能),还有9.3新增的操作者。当使用JSON 资料类型,资料的被存储成一完全一样的副本,功能还在此之上运作,还另外需要后台运作的重新分析。

    这心得JSONB 资料类型以已降解的2元格式存储,所以,插入此资料会比JSON高效,因为后台不再需要重新分析,因此让它更快速运行,而且还兼顾GIN 索引。就是因为最后这个原因,我们实际上建议读者使用jsonb来代替json制作程式(当然你还可以因应需要而使用json)。请记住jsonb使用相同的操作者和功能,读者们可以看我之前的帖子去令你得到些什么启发(或者干脆看Postgres的文件)。

    为什么我在postgresql的json数据中查询,速度会比mysql慢很多

    PostgreSQL 9.4 引入了jsonb,一个新的列类型用于存储文档到你的关系数据库中。jsonb和json在更高的层面上看起来几乎是一样的,但在存储实现上是不同的。  使用jsonb的优势在于你可以轻易的整合关系型数据和非关系型数据,在性能方面,可以比大多数类似于MongoDB这样的非关系数据库更好  理解json和jsonb之间的不同  因此,两种列类型之间的区别是什么?当我们比较写入数据速度时,由于数据存储的方式的原因,jsonb会比json稍微的慢一点。  json存储完整复制过来的文本输入,必须一遍又一遍的解析在你调用任何函数的时候。它不支持索引,但你可以为查询创建表达式索引。  jsonb存储的二进制格式,避免了重新解析数据结构。它支持索引,这意味着你可以不使用指定的索引就能查询任何路径。  其他的不同包括,json列会每次都解析存储的值,这意味着键的顺序要和输入的时候一样。但jsonb不同,以二进制格式存储且不保证键的顺序。因此,如果你有软件需要依赖键的顺序,jsonb可能不是你的应用的最佳选择。

    数据库系统有哪些,数据库软件有哪些

    数据库系统有哪些,数据库软件有哪些

    比较常见的有三种数据库:

    ACCESS , SQL Server 和 Oracle

    一般企业级低代码开发平台,都有哪些具体功能?

    众所周知,每家公司在发展过程中都需要构建大量的内部系统, 如运营使用的用户管理后台,销售线索后台,双十一活动后台等。许多公司内部也会聘请专业的研发团队负责开发各类后台和内部工具,大量的公司为此付出了高额的成本,工程师也因需求量大反复构建基础代码,并在这种重复造轮子的行为中磨灭了创造的热情。那么一款低代码的出现,就显得弥足珍贵了,非常方便。

    一、体验过程

    大致流程我体验过了,我们先来看看它具体有哪些开发亮点,方便后面做细分。

    里面至少包含表单建模、流程设计、报表可视化、代码生成器、系统管理、前端UI等组件。

    像上面这些功能,可以直接引用,我们就没必要重新造轮子,仅选择合适的组件进行集成和二次开发,即可自主开发一个低代码平台。

    01、连接数据源

    支持连接多数据源,帮助应用快速与第三方系统完成数据整合,将第三方系统数据整合在平台里。支持包括主流数据库SQL Server、MySQL、Oracle、PostgreSQL,同时兼容国产数据库达梦、金仓等。

    02、设计表单

    内置较为丰富便捷的表单引擎,拖拽搭建即可,官网显示支持有50余种控件,倒是可以满足多种业务场景下的搭建需求。

    PC端设计好表单后,支持移动端同步设计,一键发布至APP、小程序、H5等移动平台上,较为高效的就完成了多端自动适配,实现信息互联互通。

    03、流程设计

    强大流程定义功能(节点审批、子流程、条件分支、选择分支、并分支、定时器等),业务逻辑简单好理解、业务流程梳理快捷明了,同时支持一表单多流程的设置。

    封装大量具有中国特色的流程动作,满足审批需求,包括权限设置、会签、或签、重审、转审、催办、撤回、加签等审批动作。

    04、图表呈现

    通过简易配置即可自动生成各种类型的报表,内置大量可视化控件效果,通过OLAP分析功能,帮助洞察解决数据背后的问题。

    同时支持静态数据、数据库和API等多种数据源接入数据,可满足多元化的数据整合需求。

    05、组织架构设置

    JNPF支持多租户模式,可根据管理模式差异进行业务分区应用;支持同步管理多个资工作区环境,实现各子工作区的日常使用互不干扰。

    当然,不用担心的是,不同的分子公司它也支持分别对接企微和钉钉架构。

    二、效率评价

    极易实现。整个过程流畅,基本无卡顿,易于理解和调试。

    多端开发。PC端设置好表单后移动端同步生成,很便捷。

    有简单的功能配置,也有可用于配置复杂的场景。后者,可能对于业务人员开发上要下点功夫,但并不影响它的全能性。

    三、小结

    对于整个应用开发流程体验完成后。个人认为它的综合使用感及市场性价比算是不错的。10分钟完成一个基础应用,2-3小时就能摸清整套系统的使用流程和基本功能的位置,产品的功能集成和操作复杂平衡也较为合理。

    显示全文