I have a super simple table test e.g. 
create table test (
    id serial primary key,
    status varchar (10)
);
insert into test (status) 
     values ('ready'), ('ready'), 
            ('steady'), 
            ('go'), ('go'), ('go'), 
            ('new');
To get the aggregated counts I can run: -
1) Simple multi-row result using group by
select status, 
       count(id) as count        
  from test
 group by status
... which returns ...
-------+-------
status | counts
-------+-------
go     |      3
ready  |      2
new    |      1
steady |      1
-------+-------
2) Single-Row Result using jsonb_object_agg
    with stats as (
       select status, 
              count(id) as count        
         from test
     group by status
    )
    select jsonb_object_agg (status, count) as status_counts from stats
... which returns ...
--------------------------------------------------
status_counts
--------------------------------------------------
{ "go" : 3, "new" : 1, "ready" : 2, "steady" : 1 }
--------------------------------------------------
Mybatis Interface method.
In my Java code (via MyBatis) I have a method: -
public Map<String, Integer> selectStatusCounts();
What I'm keen to figure out is how to map either query to the Map<String, Integer> Java object via MyBatis?
Update (1)
On a_horse_with_no_name advice and this stackover article I've come up with this: -
3) Single-Row Result using hstore
select hstore(array_agg(hs_key), array_agg(hs_value::text))
from (
    select 
        status, 
        count(id) as count        
    from test
    group by status    
) x(hs_key,hs_value)
... which returns ...
--------------------------------------------------
status_counts
--------------------------------------------------
"go"=>"3", "new"=>"1", "ready"=>"2", "steady"=>"1"
--------------------------------------------------
Using something like this could maybe work: -
Will test now! :-)
Update (2)
Thanks a_horse_with_no_name again for your contributions - I'm very close now but still weirdness with MyBatis.  Here is a type handler I created (so I can reuse the aggregations elsewhere): -
@MappedTypes(LinkedHashMap.class)
@MappedJdbcTypes(JdbcType.OTHER)
public class MyBatisMapHstoreToStringIntegerMap implements TypeHandler<Map<String, Integer>> {
    public MyBatisMapHstoreToStringIntegerMap() {}
    public void setParameter(PreparedStatement ps, int i, Map<String, Integer> map, JdbcType jdbcType) throws SQLException {
        ps.setString(i, HStoreConverter.toString(map));
    }
    public Map<String, Integer> getResult(ResultSet rs, String columnName) throws SQLException {
        return readMap(rs.getString(columnName));
    }
    public Map<String, Integer> getResult(ResultSet rs, int columnIndex) throws SQLException {
        return readMap(rs.getString(columnIndex));
    }
    public Map<String, Integer> getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return readMap(cs.getString(columnIndex));
    }
    private Map<String, Integer> readMap(String hstring) throws SQLException {
        if (hstring != null) {
            Map<String, Integer> map = new LinkedHashMap<String, Integer>();
            Map<String, String> rawMap = HStoreConverter.fromString(hstring);
            for (Map.Entry<String, String> entry : rawMap.entrySet()) {
                map.put(entry.getKey(), Integer.parseInt(entry.getValue())); // convert from <String, String> to <String,Integer>
            }
            return map;
        }
        return null;
    }
}
... and here's the mapper interface ...
public interface TestMapper {
    public Map<String, Integer> selectStatusCounts();
}
... and here is the <select> inside the XML mapper file ...
<select id="selectStatusCounts" resultType="java.util.LinkedHashMap">
    select hstore(array_agg(hs_key), array_agg(hs_value::text)) as status_counts
    from (
        select 
            status, 
            count(id) as count        
        from test
        group by status    
    ) x(hs_key,hs_value)
</select>
However, it returns a Map with one entry called status_counts the value of which is the actual map I want i.e. {status_counts={new=1, ready=2, go=3, steady=1}}
The following is my maven dependencies with regards PostgreSQL / MyBatis: -
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4-1201-jdbc41</version>
    </dependency>
 
    