1、和MySQL的比较PostgreSQL是一个功能强大的且开源关系型数据库系统,在网上PostgreSQL和MySQL一直有大量的对比分"/>

文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-02 10:08

关注

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

一、PostgreSQL简介

mysql-">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数据源管理:关系型分库分表,列式库分布式计算

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯