如何在getJdbcTemplate().query中将postgresql数组转换为java数组

dced5bon  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(159)

我正在使用spring与postgresql交互。这是我的问题。
人有三个属性:

  1. name(String)
  2. hobbies(String[])
  3. gender(boolean)
    如果我尝试使用下面的方法从数据库中获取人员列表
List<Person> person=  getJdbcTemplate().query("select * from person where name=?",new BeanPropertyRowMapper<person>(Person.class),name);

编译器提示

Failed to convert property value of type 'org.postgresql.jdbc.PgArray' to required type 'java.lang.String[]' for property 'hobbies';

有没有办法把pgarrayMap到java数组?

vddsk6oq

vddsk6oq1#

通过实现我们自己的RowMapper

public class PersonRowMapper implements RowMapper<Person>

现在,我们可以操作rs.getArray()的结果,然后返回person。

qq24tv8q

qq24tv8q2#

我没有找到如何解决jdbctemplate + pgArray的问题。所以我写了一些修复。
您可以使用自己的ColumnMapRowMapper

public class ColumnRawMapper extends ColumnMapRowMapper {
        @Override
        protected Object getColumnValue(ResultSet rs, int index) throws SQLException {
            Object obj = rs.getObject(index);
            if (obj instanceof PgArray) {
                return ((PgArray) obj).getArray();
            }
            return super.getColumnValue(rs, index);
        }
    }

Map<String, Object> ggWp = jdbcTemplate.queryForObject("select * from temp where ss='3'", new ColumnRawMapper());

相关问题