데이터베이스 운영을 위한 인프라를 완성했다면 이제 실제로 JDBC 데이터 운영을 수행할 차례입니다. 관련된 데이터베이스 테이블의 ER 다이어그램은 다음과 같습니다.
위 그림에서 볼 수 있듯이 첫 번째 단계는 t_user 테이블에 레코드를 추가하는 것입니다. 사용자 등록에는 여러 테이블을 운영해야 하므로 먼저 간단한 JDBC 기반 트랜잭션 프레임워크를 작성해야 합니다.
@Override public long registerUser(Map<String, Object> userInfo) { Connection conn = null; long userId = 0; try { conn = JdbcDs.getConnection(); conn.setAutoCommit(false); userId = addUser(conn, userInfo); if (userId <= 0) { throw new SQLException("Fail to add user in t_user"); } conn.commit(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } userId = -1; } finally { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return userId; }
두 번째는 특정 사용자 추가 작업입니다. 코드는 다음과 같습니다.
private long addUser(Connection conn, Map<String, Object> userInfo) { long userId = -1; PreparedStatement stmt = null; ResultSet rst = null; String sql = "insert into t_user(user_name, user_group_id, user_level_id) values(?, 2, 1)"; try { stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); stmt.setString(1, (String)userInfo.get("userName")); int affectedNum = stmt.executeUpdate(); if (1 == affectedNum) { rst = stmt.getGeneratedKeys(); if (rst.next()) { userId = rst.getLong(1); } } else { userId = -1; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); userId = -1; } finally { try { if (rst != null) { rst.close(); } if (stmt != null) { stmt.close(); } } catch (Exception ex) { } } return userId; }
마지막으로 테스트 케이스의 성공 조건이 0보다 큰 반환된 userId로 변경됩니다.
테스트 사례를 실행하면 성공적으로 통과됩니다.
위의 기사를 마치고 드디어 의미 있는 개발 작업을 수행할 수 있게 되었습니다. 다음 단계는 모든 사용자 등록 비즈니스 로직을 구현하는 것이고, 또 다른 단계는 userName이 반복되는 등의 비정상적인 상황을 처리하는 것입니다. 이러한 모든 기능을 완료한 후에는 JSP 페이지를 통한 등록 테스트를 포함하는 엔드투엔드 테스트도 수행해야 합니다.
위 내용은 New Java Movement: Test Driven Development 3---사용자 등록 4. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!