Spring Data Jpa整合PostgreSQL(二)

这篇博客介绍了如何在Spring Boot应用中整合Spring Data JPA与PostgreSQL,重点关注JSONB类型和List类型的处理。文章讨论了导入相关依赖、配置数据源、定制方言以支持JSONB,以及自定义UserType和AttributeConverter实现JSONB和List<String>的转换。此外,还展示了针对JSONB字段的查询示例。

直接看三吧,这个也没写好

PostgreSQL的话主要还是整理一下使用方法吧,毕竟我现在也只会使用。

PostgreSQL的使用方法与MySQL类似, 但更全面,实现了SQL-2/SQL-92 和 SQL-3/SQL-99标准。优点缺点就不提了,直接说说怎么用吧。

咱使用pg当然不会只把他当做MySQL来用,而我用它的目的就是jsonb。

0. 导入有用的包

 

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

<exclusions>

<exclusion>

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-slf4j-impl</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.postgresql</groupId>

<artifactId>postgresql</artifactId>

</dependency>

 

1.基本配置

 

spring:

datasource:

url: jdbc:postgresql://118.89.146:5432/postgres

username: postgres

password: 123456

driverClassName: org.postgresql.Driver

type: com.alibaba.druid.pool.DruidDataSource

initialization-mode: always

jpa:

show-sql: true

database-platform: cn...ledger.dialect.JsonbPostgresDialect

hibernate:

ddl-auto: update

properties:

hibernate:

temp:

use_jdbc_metadata_defaults: false

ps: use_jdbc_metadata_defaults这个配置很重要,可以解决SpringBoot2.0版本的一个错误,具体机理我还没有研究,只是参考了一个博客做出的修改。

 

2. 配置方言

以上的配置与MySQL没什么差别,需要注意是方言的指定,我写的这个需要自己配置方言类:

 

import org.hibernate.dialect.PostgreSQL94Dialect;

import org.hibernate.dialect.PostgreSQL95Dialect;

import org.hibernate.type.StringType;

import java.sql.Types;

/**

* @Author ZhenYang

* @Date Created in 2018/3/14 13:45

* @Description

*/

public class JsonbPostgresDialect extends PostgreSQL95Dialect {

public JsonbPostgresDialect() {

super();

registerColumnType(Types.JAVA_OBJECT, "jsonb");

registerHibernateType( Types.ARRAY, StringType.class.getName());

}

}

这里我指定了jsonb的类型,下面那个HibernateType是当时测试玩的。

 

3.配置jsonb类型

 

import com.alibaba.fastjson.JSON;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.hibernate.HibernateException;

import org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl;

import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;

import org.hibernate.engine.spi.SharedSessionContractImplementor;

import org.hibernate.type.SerializationException;

import org.hibernate.usertype.ParameterizedType;

import org.hibernate.usertype.UserType;

import org.postgresql.util.PGobject;

import org.springframework.util.ObjectUtils;

### 整合 Spring Data JPAPostgreSQL 为了成功整合Spring Data JPAPostgreSQL,在项目的`pom.xml`或`build.gradle`中需引入必要的依赖项,包括但不限于Spring Data JPAPostgreSQL JDBC驱动程序。 在配置文件(通常是`application.properties`或`application.yml`)里指定数据库连接细节和其他JPA特定属性。以下是基于提供的参考资料整理出来的配置实例: 对于采用`.properties`格式的应用配置文件而言,可以参照如下设置[^1]: ```properties # 数据库基本信息配置 spring.datasource.url=jdbc:postgresql://localhost:5432/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=org.postgresql.Driver # JPA相关配置 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.database=postgresql spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false ``` 当使用YAML格式(`application.yml`)时,则应按照下面的方式编写[^4]: ```yaml spring: datasource: url: jdbc:postgresql://localhost:5432/your_database_name username: your_username password: your_password driverClassName: org.postgresql.Driver jpa: show-sql: true hibernate: ddl-auto: update properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect temp.use_jdbc_metadata_defaults: false ``` 上述配置中的`hibernate.ddl-auto`参数被设为`update`意味着每当应用程序启动时,它会自动更新模式结构以匹配实体定义;而`show-sql`选项开启后可以让开发者看到执行的实际SQL语句以便调试之用。 另外值得注意的是,如果应用环境中有特殊需求,比如支持JSONB字段或者其他高级特性的话,可能还需要自定义方言类来扩展默认行为。 最后,确保已经选择了合适的开发工具包(Lombok、Spring Web等),并根据实际业务逻辑构建相应的Repository接口和服务层组件完成CRUD操作等功能实现[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值