Spring jdbc Spring JDBC动态查询到对象映射

Spring jdbc Spring JDBC动态查询到对象映射,spring-jdbc,Spring Jdbc,我必须动态执行来自数据库的查询。该查询具有动态字段,需要将其转换为map作为键值对并发送到view 一个查询可能只返回一个字段,而另一个查询可能返回多行的两个以上字段。我必须以这样的方式编写代码,使其能够处理n个字段,并使用spring jdbc将其作为映射返回。spring提供了两种解决问题的方法 方法1:使用JdbcTemplate类中的queryForList方法。这将返回由列名填充的映射列表作为键,DB记录作为值。你必须手动反复浏览这个列表。列表中的每个映射对象表示resultset中的

我必须动态执行来自数据库的查询。该查询具有动态字段,需要将其转换为map作为键值对并发送到view
一个查询可能只返回一个字段,而另一个查询可能返回多行的两个以上字段。我必须以这样的方式编写代码,使其能够处理n个字段,并使用spring jdbc将其作为映射返回。

spring提供了两种解决问题的方法

方法1:使用JdbcTemplate类中的queryForList方法。这将返回由列名填充的映射列表作为键,DB记录作为值。你必须手动反复浏览这个列表。列表中的每个映射对象表示resultset中的一行。 例如:

List<Map<String, Object>> result = jdbcTemplate.queryForList(query, new Object[]{123});

        Iterator items = result.iterator();

        while(items.hasNext()){
            Map<String, Object> row = (Map<String, Object>) items.next();
            System.out.println(row);
        }
List result=jdbcTemplate.queryForList(查询,新对象[]{123});
迭代器项=result.Iterator();
while(items.hasNext()){
映射行=(映射)项。下一步();
系统输出打印项次(行);
}
方法2:这并不完全符合您的需求,但比第一种方法快一点,也涉及更多的编码。您可以使用queryForRowSet方法

    SqlRowSet rowSet = jdbcTemplate.queryForRowSet(query,  new Object[]{3576});

    int columnCount  = rowSet.getMetaData().getColumnCount();
    System.out.println(columnCount);

    while(rowSet.next()){

        for(int id =1 ; id <= columnCount ; id ++){
            System.out.println(rowSet.getString(id)) ;
            // your custom logic goes here 

        }

    }
SqlRowSet rowSet=jdbcTemplate.queryForRowSet(查询,新对象[]{3576});
int columnCount=rowSet.getMetaData().getColumnCount();
System.out.println(columnCount);
while(rowSet.next()){

对于(intid=1;idSpring提供了两种解决问题的方法

方法1:使用JdbcTemplate类中的queryForList方法。这将返回由列名填充的映射列表作为键,DB record作为值。您必须手动迭代该列表。列表中的每个映射对象表示resultset中的一行。 例如:

List<Map<String, Object>> result = jdbcTemplate.queryForList(query, new Object[]{123});

        Iterator items = result.iterator();

        while(items.hasNext()){
            Map<String, Object> row = (Map<String, Object>) items.next();
            System.out.println(row);
        }
List result=jdbcTemplate.queryForList(查询,新对象[]{123});
迭代器项=result.Iterator();
while(items.hasNext()){
映射行=(映射)项。下一步();
系统输出打印项次(行);
}
方法2:这并不完全符合您的需求,但比第一种方法快一点,而且还涉及更多的编码。您可以使用queryForRowSet方法

    SqlRowSet rowSet = jdbcTemplate.queryForRowSet(query,  new Object[]{3576});

    int columnCount  = rowSet.getMetaData().getColumnCount();
    System.out.println(columnCount);

    while(rowSet.next()){

        for(int id =1 ; id <= columnCount ; id ++){
            System.out.println(rowSet.getString(id)) ;
            // your custom logic goes here 

        }

    }
SqlRowSet rowSet=jdbcTemplate.queryForRowSet(查询,新对象[]{3576});
int columnCount=rowSet.getMetaData().getColumnCount();
System.out.println(columnCount);
while(rowSet.next()){
对于(int id=1;id