Java JDBC使用现有行映射器映射同一表的联接
我有一个将表与其自身连接起来的查询:Java JDBC使用现有行映射器映射同一表的联接,java,mysql,spring-jdbc,Java,Mysql,Spring Jdbc,我有一个将表与其自身连接起来的查询: SELECT * FROM data d1 join data d2 ON d1.id != d2.id WHERE ... 我已经有了一个行映射器用于数据,它是表数据的java对象。现在,我可以一个接一个地映射字段并构建两个数据对象: jdbcTemplate.query(sql, new RowMapper() { @Override public Object mapRow(Resul
SELECT * FROM data d1 join data d2 ON d1.id != d2.id WHERE ...
我已经有了一个行映射器用于数据
,它是表数据
的java对象。现在,我可以一个接一个地映射字段并构建两个数据对象:
jdbcTemplate.query(sql, new RowMapper()
{
@Override
public Object mapRow(ResultSet arg0, int arg1) throws SQLException
{
Data d1 = new Data();
Date d2 = new Date();
Data [] duple = new Data []{d1, d2};
d1.setId(arg0.getLong(1));
d1.setRegistryName(arg0.getString(2));
...
d2.setId(arg0.getLong(11));
d2.setRegistryName(arg0.getString(12));
...
return duple;
}
});
但是,这需要大量的手工工作。因此,我可以使用我的DataRowMapper
映射第一个对象,但随后我必须手动映射第二个对象:
jdbcTemplate.query(sql, new RowMapper()
{
@Override
public Object mapRow(ResultSet arg0, int arg1) throws SQLException
{
Data d1 = new Data();
Date d2 = new Date();
Data [] duple = new Data []{d1, d2};
d1 = new DataRowMapper<ShopSyncInfo>(Data.class).mapRow(arg0, arg1);
d2.setId(arg0.getLong(11));
d2.setRegistryName(arg0.getString(12));
...
return duple;
}
});
jdbcTemplate.query(sql,新的行映射器()
{
@凌驾
公共对象映射行(结果集arg0,int arg1)引发SQLException
{
数据d1=新数据();
日期d2=新日期();
Data[]duple=新数据[]{d1,d2};
d1=新的DataRowMapper(Data.class).mapRow(arg0,arg1);
d2.setId(arg0.getLong(11));
d2.setRegistryName(arg0.getString(12));
...
返回双工;
}
});
所以我想以同样的方式映射第二个对象。有没有办法做到这一点?项目中提供了对一对多关系的映射支持。看。您需要将此项目添加到生成中。但是,您不需要额外的Oracle支持,因此以下依赖关系就足够了:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jdbc-core</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
org.springframework.data
spring数据jdbc核心
1.1.0.1发布
我认为您也可以将其应用于一对一映射