반응형

<참조>  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);

 

 

[참고] 레퍼런스 사이트 

https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#jdbc-JdbcTemplate

 

Data Access

The Data Access Object (DAO) support in Spring is aimed at making it easy to work with data access technologies (such as JDBC, Hibernate, or JPA) in a consistent way. This lets you switch between the aforementioned persistence technologies fairly easily, a

docs.spring.io

 

반응형

+ Recent posts