О spring Rowmapper, mapRow

#spring #spring-mvc #bind #jdbctemplate

#весна #spring-mvc #привязка #jdbctemplate

Вопрос:

У меня есть несколько вопросов о Spring rowmapper. Я собираюсь получать данные из своей базы данных с помощью rowmapper.Но у моего командного объекта «Таблица» есть только переменная списка. автоматически ли Rowmapper сопоставляет каждую запись со списком? это posibble? я знаю, что тег spring bind автоматически привязывает значение к списку.

исправьте это.

Table.java

 public class Table implements Serializable{
    private List<String> tableNum = new ArrayList<String>();

// setter and getter
}
  

Dao

 private class TableRowMapper implements RowMapper {
         public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
                Table table = new Table();
            table.setTableNum(rs.getString("TABLE_LOCATION"));
            return table;
        }
    }
  

Ответ №1:

Используется RowMapper для сопоставления одной строки с одним объектом домена, а не для сопоставления нескольких строк с одним объектом домена. Также RowMapper это не объект типа Dao. Он должен использоваться с некоторым методом запроса, например JdbcTemplate.query(sql,args,rowMapper)

Но в вашем случае вам не нужен RowMapper . Вместо этого вы должны просто использовать JdbcTemplate.queryForList . Подробнее о методе запроса см. в JdbcTemplate API. Простым примером может быть что-то вроде:

 public class YourDaoImpl extends JdbcTemplate implements YourDao {
    private static final String SQL = 
            "select SOME_FIELD from SOME_TABLE where SOMETHING = ?";

    @Override
    public List<String> getSomeFieldBySomething(String something) {
        return (List<String>)queryForList( SQL, 
                                           new Object[] { something }, 
                                           String.class);
    }
}
  

Вы используете dao для своих сервисов.


Обновить

Благодаря вашей помощи я могу получить один столбец из своей базы данных. но у меня проблемы. моя таблица БД состоит из нескольких столбцов. и я должен получить их все. и.. как я могу это сделать? пожалуйста, помогите мне ~!!!

Вы опубликовали вопрос, в котором это не указано. В этом случае вам нужно сделать List<DomainObject> . Не a List<String> . List<String> допускает только одно значение. Если у вас есть a List<DomainObject> , то в классе DomainObject могут быть все ваши поля. Тогда вы используете RowMapper . И вы все равно можете использовать queryForList , который использует RowMapper вариант

 public class Table {
    private String field1;
    private String field2;
    private String field3;
    // getters and setters
}

public class YourDaoImpl extends JdbcTemplate implements YourDao {
    private static final String SQL = 
            "select * from SOME_TABLE where SOMETHING = ?";

    @Override
    public List<Table> getTableBySomething(String something) {
        return (List<Table>)queryForList( SQL, 
                                          new Object[] { something }, 
                                          new RowMapper<Table>(){
            @Override
            public Table mapRow(ResultSet rs, int rowNumber) {
                Table table = new Table();
                table.setField1(rs.getString("feild1"));
                // set the others
                return table;
            }
        });
    }
}
  

Кроме того, на вашем месте я бы забыл о jdbc и выбрал ORM-фреймворк, такой как JPA. Если вам нужны целые объекты домена, это правильный путь.

Комментарии:

1. О, peeskillet. Спасибо вам! это потрясающе. хорошо! Список запросов!

2. Благодаря вашей помощи я могу получить один столбец из своей базы данных. но у меня проблемы. моя таблица БД состоит из нескольких столбцов. и я должен получить их все. и.. как я могу это сделать? пожалуйста, помогите мне ~!!!