0


springboot整合pgsql

demo代码说明

springboot使用mybatis-plus整合pgsql

在springboot项目中使用pgsql,使用了mybatis-plus、druid

代码见 spring-demo: springboot 结合各种插件 demo

注意事项:

版本兼容

正常springboot使用,但是注意需要添加pgsql正确版本[maven pgsql高版本向下兼容],

比如pgsql时14,那么需要对应maven中42.5版本,可以查看pgsql对jdbc的官网Home | pgJDBC
pgsqlmaven-pgsql14.x42.513.x42.412.x42.2.2411.x42.2.20

类型转换【自定义方式】

pgsql特殊类型,比如location与java数据类型的相互转换问题

在java项目中进行转换,一般按照三步:

1.定义转换规则,及pgsql中的类型如何转换到java中

public class LocationTypeHandler extends BaseTypeHandler<double[]> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, double[] parameter, JdbcType jdbcType) throws SQLException {
        if (parameter != null && parameter.length == 2) {
            ps.setObject(i, "(" + parameter[0] + "," + parameter[1] + ")", Types.OTHER);
        } else {
            ps.setNull(i, Types.OTHER);
        }
    }

    @Override
    public double[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String point = rs.getString(columnName);
        if (point == null) {
            return null;
        }
        point = point.replace("(", "").replace(")", "");
        String[] split = point.split(",");
        return new double[]{Double.parseDouble(split[0]), Double.parseDouble(split[1])};
    }

    @Override
    public double[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String point = rs.getString(columnIndex);
        if (point == null) {
            return null;
        }
        point = point.replace("(", "").replace(")", "");
        String[] split = point.split(",");
        return new double[]{Double.parseDouble(split[0]), Double.parseDouble(split[1])};
    }

    @Override
    public double[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String point = cs.getString(columnIndex);
        if (point == null) {
            return null;
        }
        point = point.replace("(", "").replace(")", "");
        String[] split = point.split(",");
        return new double[]{Double.parseDouble(split[0]), Double.parseDouble(split[1])};
    }
}
2.注册自定义转换规则
@Configuration
public class MyBatisConfig {

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);

        // 获取类型处理器注册器
        TypeHandlerRegistry typeHandlerRegistry = sessionFactory.getObject().getConfiguration().getTypeHandlerRegistry();
        // 注册自定义类型处理器
        typeHandlerRegistry.register(double[].class, JdbcType.OTHER, LocationTypeHandler.class);

        return sessionFactory.getObject();
    }
}
3.使用
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("city")
public class City {
    private Integer id;
    private String name;
    @TableField(typeHandler = LocationTypeHandler.class)
    private double[] location;
}

这样可以正常相互转换

double[] location = new double[] {1,4};

testService.addCity(new City(4,"nj",location));

类型转化【使用pgsql定义】

  1. 几何数据类型:- box: 使用 org.postgresql.geometric.PGbox 对象- circle: 使用 org.postgresql.geometric.PGcircle 对象- line: 使用 org.postgresql.geometric.PGline 对象- lseg: 使用 org.postgresql.geometric.PGlseg 对象- path: 使用 org.postgresql.geometric.PGpath 对象- point: 使用 org.postgresql.geometric.PGpoint 对象- polygon: 使用 org.postgresql.geometric.PGpolygon 对象
  2. 其他数据类型:- inet: 使用 java.net.InetAddressorg.postgresql.util.PGobject 对象- macaddr: 使用 org.postgresql.util.PGobject 对象- json: 使用 org.postgresql.util.PGobject 对象,或者直接使用 String- jsonb: 使用 org.postgresql.util.PGobject 对象,或者直接使用 String- uuid: 使用 java.util.UUID- tsvector: 使用 org.postgresql.util.PGobject 对象

本文转载自: https://blog.csdn.net/hey_lie/article/details/140644650
版权归原作者 fooleryang 所有, 如有侵权,请联系我们删除。

“springboot整合pgsql”的评论:

还没有评论