日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發布時間:2025/3/17 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据源管理 | 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: 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;@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类型应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。