<참조> https://www.boostcourse.org/web316/lecture/20660
Spring, JDBC 예제 코드
1. Spring JDBC 패키지
org.springframework.jdbc
.core : JdbcTemplate, Helper 객체를 제공한다.
.datasource : DataSource 접근 클래스, 트랜젝션매니져, DataSource 구현을 제공한다.
.object : RDBMS 조회, 갱신, 저장 객제를 제공한다.
.support : jdbc.core, jdbc.object 사용하는 JDBC 프레임워크를 지원한다.
2. JDBC Template (org.springframework.jdbc.core 핵심 클래스)
리소스 생성, 해지를 자동 처리하고, 쿼리 문장 생성과 실행을 처리한다.
SQL 조회, 갱신 및 저장 프로시저 호출, ResultSet 반복 실행하게 해준다.
JDBC 예외를 org.springframework.dao 패키지에 정의된 일반 예외로 바꿔준다.
3. 예제 코드
(1) 테이블 열(row) 개수 (Select)
int rowCount = this.jdbcTemplate.queryForInt("select count(*) from mytable");
(2) 특정 조건에 일치하는 열(row) 개수 (Select)
int rowCount = this.jdbcTemplate.queryForInt(
"select count(*) from mytable where name = ?", "sualchi");
(3) 문자열 결과 처리 (Select)
String name = this.jdbcTemplate.queryForObject(
"select name from mytable where id = ?", new Object[]{1004L}, String.class);
(4) 특정 객체(예; User 클래스 객체) 한 건 조회 (Select)
User user = this.jdbcTemplate.queryForObject(
"select name, age, tel from mytable where id = ?", new Object[]{1004L},
new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setName(rs.getString("name"));
user.setAge(rs.getString("age"));
user.setTel(rs.getString("tel"));
return user;
}
});
(5) 여러 건 조회하기 (Select)
List<User> user_list = this.jdbcTemplate.query(
"select name, age, tel from mytable",
new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setName(rs.getString("name"));
user.setAge(rs.getString("age"));
user.setTel(rs.getString("tel"));
return user;
}
});
(6) 한건 구하기와 여러 건 구하기가 있을 경우 (Select)
public List<User> findAllUser() {
return this.jdbcTemplate.query( "select name, age, tel from mytable", new UserMapper());
}
private static final class UserMapper implements RowMapper<Userr> {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setName(rs.getString("name"));
user.setAge(rs.getString("age"));
user.setTel(rs.getString("tel"));
return actor;
}
}
(7) 추가 (Insert)
this.jdbcTemplate.update("insert into mytable (name, age, tel) values (?, ?, ?)", "Hong", "350", "000-1234-1234");
(8) 수정 (Update)
this.jdbcTemplate.update("update mytable set = ? where id = ?", "Park", 1004L);
(9) 삭제 (Delete)
this.jdbcTemplate.update("delete from mytable where id = ?", Long.valueOf(1004L));
4. JdbcTemplate 아닌 다른 접근
(1) NamedParameterJdbcTemplate
JDBC statement 인자를 파라미터명으로 작성할 수 있다.
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
public int countOfUserByName(String name) {
String sql = "select count(*) from mytable where name = :name";
SqlParameterSource namedParameters = new MapSqlParameterSource("name", name);
return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
(2) 간편한 데이터 insert
jdbcInsert = new SimpleJdbcInsert(dataSource).withTableName("MyTable");
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("name", name);
parameters.put("age", age);
parameters.put("tel", tel);
jdbcInsert.execute(parameters);
[참고] 레퍼런스 사이트
'SPRING' 카테고리의 다른 글
Spring WEB MVC 프레임워크 (2) (0) | 2022.06.13 |
---|---|
Spring WEB MVC 프레임워크 (1) (0) | 2022.06.12 |
이클립스 메이븐 프로젝트 만들기 (0) | 2022.06.06 |
스프링 부트 JAR 독립 실행/배포 (0) | 2022.06.06 |
스프링 제대로 공부했는지 5분 안에 확인하는 방법 (0) | 2022.05.29 |