-- JDBC 연결 하기위한 준비
Maven Repository에서 다운받을 파일.
1. spring jdbc :: 스프링에서 JDBC연결해주는 파일
2. c3p0 :: 커네션 풀 제공해주는 파일
1. 여러결과값을 받는 select문 메서드 :: List query
2. 하나의 값을 받는 select 문 메서드 :: Object queryForObject
3. insert update delete 문 메서드 :: public int update
- Spring - JDBC 예제.
[db.properties]
1 2 3 4 | jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@localhost:1521:XE jdbc.username=scott jdbc.password=tiger | cs |
본인의 DB에 맞게 driver, url, username, password를 로그인 할 수 있도록 properties파일로 뺀다.
나중에 다른 DB로 쓰려면 여기 부분에서 수정하면 된다.
[jdbcEx.xml]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <beans> <!-- 프로퍼티 파일로부터 데이터를 읽어온다. --> <context:property-placeholder location="classpath:db.properties" /> <!-- 커넥션 풀을 만들기위한 과정. db.properties에 있는 값을 가져와 EL로 꺼냄 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- dataSource는 위의 bean객체를 가져와서 쓴다. --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource" /> <!-- jdbcTemplate를 주입받고있는 jdbcDAO클래스로 빈으로 등록. --> <bean id="jdbcDAO" class="spring.jdbc.jdbcDAO" p:jdbcTemplate-ref="jdbcTemplate" /> </beans> | cs |
- 빈 객체의 생성과 소멸시 메서드 호출하기
1. init-method ="생성시 호출할 빈 메서드명"
2. destory-method = "소멸시 호출할 빈 메서드명" 속성을 가진다.
[UserRowMapper.java]
1 2 3 4 5 6 7 8 9 10 11 12 | public class UserRowMapper implements RowMapper<memberDTO>{ public memberDTO mapRow(ResultSet rs, int rowNum) throws SQLException{ memberDTO member = new memberDTO(); member.setMemberid(rs.getString("memberid")); member.setPassword(rs.getString("password")); member.setName(rs.getString("name")); member.setEmail(rs.getString("email")); return member; } } | cs |
컬럼명과 같은 변수를 선언한 DTO값에 DB에 저장된 데이터를 ResultSet으로 꺼내와 저장하는 작업.
이부분을 하나의 클래스로 뺀다. RowMapper라는 클래스명으로
[jdbcDAO.java]
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | public class jdbcDAO { // JdbcTemplate을 사용하는 DAO클래스 작성. JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } // 메서드 - 쿼리 실행 public List<memberDTO> selectAll() { String sql = "select * from member"; UserRowMapper mapper = new UserRowMapper(); // DB에 만든 컬럼과 같은 변수를 가진 클래스에 // DB에있는 값을 꺼내와서 DTO에 저장한 클래스 객체 생성 List<memberDTO> list = jdbcTemplate.query(sql, mapper); // jdbcTemplate에 수행할 쿼리문과, rs문을 실행할 mapper를 매개변수로 넣는다. // 기존에 하던 방식과 다른점은, DB에 저장되어있는 값을 꺼내와 DTO에 저장하는 과정을 // 다른 클래스로 뺐다는점이다. return list; } //하나의 결과값을 숫자로 받아오는 문 public Integer count() { Integer count = jdbcTemplate.queryForObject("select count(*) from member", Integer.class); return count; } //select-one //insert //update //delete //하나의 셀렉트결과값을 받아오는 문 public Object selectOne() { UserRowMapper mapper = new UserRowMapper(); Object[] id = {"seypark"}; Object select = jdbcTemplate.queryForObject("select * from member where memberid = ?", id, mapper); return select; } //insert문 public int insert() { String sql = "insert into member values(?,?,?,?)"; Object[] insert = {"scott","tiger","1234","scott@tiger.com"}; int a = jdbcTemplate.update(sql, insert); return a; } //update문 public int update() { String sql = "update member set password = ?, name = ? where memberid = ?"; Object[] update = {"4444","토끼","scott"}; int a= jdbcTemplate.update(sql, update); return a; } //delete public int delete() { String sql = "delete from member where memberid = ?"; Object[] delete = {"scott"}; int a = jdbcTemplate.update(sql, delete); return a; } | cs |
[Main.java]
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 32 33 34 35 36 37 38 39 | public class Main { public static void main(String[] args) { ApplicationContext context = new GenericXmlApplicationContext("jdbcEx.xml"); jdbcDAO dao = context.getBean("jdbcDAO", jdbcDAO.class); // if(dao.insert() == 1) { // System.out.println("insert 성공"); // }else { // System.out.println("insert 실패"); // } // // if(dao.update() == 1) { // System.out.println("update 성공"); // }else { // System.out.println("update 실패"); // } // if(dao.delete() == 1) { // System.out.println("delete 성공"); // }else { // System.out.println("delete 실패"); // } // // Object member_count = dao.count(); // System.out.println("member_count : " + member_count); // // Object member1 = dao.selectOne(); // System.out.println("select One : " + member1); // List<memberDTO> mem = dao.selectAll(); for(memberDTO member : mem) { System.out.println(member+"\n"); } System.out.println("END!!"); } } | cs |
결과 ::
DB에 저장되어있는 값을 꺼내서 DTO에 저장하는 과정은 기존에 하던 jdbc방식과 똑같지만,
그것을 다른 클래스영역으로 빼서 분리 해놨다는것이 가장 큰 차이점이다.
지금까지 DAO를 만들때마다 Statement / PrepareStatement한 후
'rs.getXxxx 를 반복하던 작업'을 따로빼서 객체화한후 간편하게 사용할 수 있는 장점이 있다.
아마도 저 rs.get하는 방법도 나중에 더 쉬운방법으로 뺄 수 있는 방법이 있을것이다.
'JAVA > Spring' 카테고리의 다른 글
Spring - mybatis 연결 (0) | 2018.09.10 |
---|---|
Spring - JdbcDaoSupport (0) | 2018.09.10 |
Spring 예제 - 어노테이션 , @Aspect (0) | 2018.09.10 |
Spring예제 - setter방식 (2) | 2018.09.06 |
Spring예제 - bean과 aop혼합사용 (0) | 2018.09.05 |