内容简介:本文源码:PostgreSQL是一个功能强大的且开源关系型数据库系统,在网上PostgreSQL和MySQL一直有大量的对比分析。大多从性能,开源协议,SQL标准,开发难度等去比较,只要有比较就会有差距和差异,看看就好。
本文源码: 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 | 数据源管理:关系型分库分表,列式库分布式计算 |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- SpringBoot整合MongoDB多数据源
- 框架—SpringBoot整合Mybatis使用Druid数据源
- SpringBoot2 整合JTA组件,多数据源事务管理
- Spring Boot 2 配置多数据源,整合 MybatisPlus 增强插件
- 【spring boot】第6篇:spring boot 整合 jdbc 数据源
- 【springboot spring mybatis】看我怎么将springboot与spring整合mybatis与druid数据源
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
编程珠玑(第2版•修订版)
[美] Jon Bentley 乔恩•本特利 / 黄倩、钱丽艳 / 人民邮电出版社 / 2014-12 / 39
历史上最伟大的计算机科学著作之一 融深邃思想、实战技术与趣味轶事于一炉的奇书 带你真正领略计算机科学之美 多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位于前列。正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”,成为世界计算机界名刊《ACM通讯》历史上最受欢......一起来看看 《编程珠玑(第2版•修订版)》 这本书的介绍吧!