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