當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
数据源管理 | PostgreSQL环境整合,JSON类型应用
生活随笔
收集整理的這篇文章主要介紹了
数据源管理 | PostgreSQL环境整合,JSON类型应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文源碼: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.DruidDataSourcedruid:driverClassName: org.postgresql.Driverurl: jdbc:postgresql://127.0.0.1:5432/db_01username: root01password: 1234563、連接池配置
@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;@Beanpublic 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/**/*.xmltypeAliasesPackage: com.post.gresql.*.entityglobal-config:db-config:id-type: AUTOfield-strategy: NOT_NULLlogic-delete-value: -1logic-not-delete-value: 0banner: falseconfiguration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: truejdbc-type-for-null: 'null'5、基礎測試案例
提供一個數據查詢,寫入,分頁查的基礎使用案例。
@Api(value = "UserController") @RestController public class UserController {@Resourceprivate 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();@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {jsonObject.setType("json");jsonObject.setValue(parameter.toString());ps.setObject(i, jsonObject);}@Overridepublic Object getNullableResult(ResultSet rs, String columnName) throws SQLException {return JSON.parseObject(rs.getString(columnName), Object.class);}@Overridepublic Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return JSON.parseObject(rs.getString(columnIndex), Object.class);}@Overridepublic 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 {@Resourceprivate 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类型应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#Struts框架理念和自制Strut
- 下一篇: Multi Dimension 数据库设