티스토리 뷰
토비의 스프링3를 따라하면서 Spring버젼이 올라가면서 바뀐부분이 있어서 정리해서 올려놓습니다.
3장 Template
queryForInt --> queryForObject
토비의스프링3를 따라하다가 JdbcContext를 JdbcTemplate으로 바꿔주는 구간에서 책이 오래 되었기 때문에 스프링을 최신버젼(저는 5버젼)을 쓰면 따라하기 힘든 구간이 나옵니다.
public int getCount() throws SQLException {
StatementStrategy st = new StatementStrategy() {
@Override
public PreparedStatement makePreparedStatement(Connection c) throws SQLException {
PreparedStatement ps = c.prepareStatement("select count(*) from car_model");
return ps;
}
};
this.jdbcContext.workWithStatementStrategy(st);
return 0;
}
위 구간입니다. 여기에서는 우리가 직접 만든 JdbcContext를 쓰고 있습니다. 하지만 다음 내용은 Spring에서 제공하는 JdbcTemplate을 쓰라는 예제가 나옵니다.
여기에서 잘 안되기 때문에 멘붕이 올 수 있습니다. 왜냐하면 queryForInt를 쓰라고 하기 때문입니다.
public int getCount() throws SQLException {
int rr = this.jdbcTemplate.queryForObject("select count(*) from car_model", Integer.class);
return rr;
}
queryForInt는 아주 오래전에 Depreciated 되었기 때문에 queryForObject를 쓰면 됩니다. 간단하게 쿼리와, 리턴받을 Class를 넘기면 됩니다. count(*)쿼리이기 때문에 Integer.class를 넘기면 되겠습니다.
get
한가지 더 바뀐게 있습니다. get을 고칠 때는 조금 더 복잡합니다. RowMapping을 넣는 부분에서 new Object[]{id}를 이용해 파라메터를 전달 하는 부분이 있습니다. 이 부분이 불편해서 depreciated되었습니다.
기존
public CarModel getDepreciated(int id) {
String sql = "select * from car_model where id = ?";
RowMapper<CarModel> rowMapper = new RowMapper<CarModel>() {
@Override
public CarModel mapRow(ResultSet rs, int rowNum) throws SQLException {
CarModel carModel = new CarModel();
carModel.setId(rs.getInt("id"));
carModel.setName(rs.getString("name"));
return carModel;
}
};
return this.jdbcTemplate.queryForObject(sql, new Object[]{id}, rowMapper);
}
기존에는 new Object[]{id} 를 써서 id를 넘겨 주었습니다. 하지만 바뀐 부분에서는 new Object[]{}로 감싸주지 않고도 넘길 수 있게 바뀌었습니다.
바뀐것
public CarModel get(int id) throws SQLException, ClassNotFoundException {
String sql = "select * from car_model where id = ?";
RowMapper<CarModel> rowMapper = new RowMapper<CarModel>() {
@Override
public CarModel mapRow(ResultSet rs, int rowNum) throws SQLException {
CarModel carModel = new CarModel();
carModel.setId(rs.getInt("id"));
carModel.setName(rs.getString("name"));
return carModel;
}
};
return this.jdbcTemplate.queryForObject(sql, rowMapper, id);
}
이렇게해서 return this.jdbcTemplate.queryForObject(sql, rowMapper, id); 에 맨 뒤에 id를 넣어서 파라메터를 전달하게 바뀌었습니다.
getAll()
jdbcTemplate.query()를 씁니다.
public List<User> getAll() {
String sql = "select * from users order by id";
RowMapper<User> rowMapper = new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User(rs.getString("id"), rs.getString("name"),
rs.getString("password"));
return user;
}
};
return this.jdbcTemplate.query(sql, rowMapper);
}
JdbcTemplate --> NamedParameterJdbcTemplate
https://velog.io/@gisung/Spring.-Spring-JDBC-%EC%82%AC%EC%9A%A9%EB%B2%95
end.
'Spring > Toby의 스프링3 따라하기' 카테고리의 다른 글
Spring Jdbc로 mysql datetime 타입의 데이터 넣기 (1) | 2021.11.14 |
---|---|
Java Enum 쓰는 법 (0) | 2021.11.13 |
토비의 스프링3 JdbcContext만들기 (0) | 2021.11.09 |
Spring boot datasource만들기 (0) | 2018.06.15 |
내 꿈은 유투버 스프링 동영상 강좌 - 02 Intellij 설치 java hello world 출력 (0) | 2016.11.28 |
- Total
- Today
- Yesterday
- Sh
- docker container tissue box
- 도커컨테이너
- 이직
- 2017 티스토리 결산
- 개발자
- docker container case
- shellscript
- docker container
- 도커티슈케이스
- 도커각티슈박스
- vim
- 싱가폴
- 도커각티슈케이스
- docker container whale
- Linux
- docker container tissue
- 도커티슈박스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |