Spring은 적용한 기술이 Method나 Class 코드에 직접 반영되지 않음
⇒ 비침투적인(non-invasive) 기술
기술 제약과 비즈니스 로직의 분리로
기존 Java 방식
/*
* 기존 Java 방식
* 기술제약(트랜잭션)과 비즈니스 로직(데이터 삽입)의 혼재
*/
public void DBTest() {
String serverURL = "jdbc:mysql://localhost:3306/{DB명}";
String id = "{계정명}";
String pw = "{비밀번호}";
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(serverURL, id, pw);
con.setAutoCommit(false); // transaction 유지를 위해 AutoCommit false
String sql1 = "insert into user_info(userno, username, age) values(1, 'Heidi', 18, 05)";
String sql2 = "insert into user_info(userno, username, age) values(2, 'Solar', 23, 06)";
PreparedStatement pstmt1 = con.prepareStatement(sql1);
pstmt1.executeUpdate();
PreparedStatement pstmt2 = con.prepareStatement(sql2);
pstmt2.executeUpdate();
conn.commit();
} catch (ClassNotFoundException e) {
System.out.println("드라이버가 존재하지 않습니다");
} catch (SQLException e) {
e.printStackTrace();
conn.rollback();
} finally {
pstmt1.close();
pstmt2.close();
conn.close();
}
}
/*
* Spring 방식
* Annotation(@)의 등장으로 기술제약과 비즈니스 로직의 분리가 가능해짐
*/
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional
public void DBTest() {
String sql1 = "insert into user_info(userno, username, age) values(1, 'Heidi', 18, 05)";
String sql2 = "insert into user_info(userno, username, age) values(2, 'Solar', 23, 06)";
jdbcTemplate.update(sql1);
jdbcTemplate.update(sql2);
}