20
ㅇ ㅇㅇㅇㅇㅇㅇ ㅇㅇ ㅇㅇ - ㅇㅇㅇ ㅇㅇㅇㅇ ㅇㅇ ㅇㅇㅇ ㅇㅇ ㅇㅇ - ㅇㅇㅇㅇ ㅇㅇ ㅇㅇㅇ ㅇㅇ - ㅇㅇㅇㅇ ㅇㅇ ㅇ Connection / PreparedStatement / ResultSet / try-catch ㅇ JDBC ㅇㅇ ㅇㅇ ㅇㅇ JDBC

ㅇ 데이터베이스 연동 지원 - 템플릿 클래스를 통한 데이터 접근 지원 - 의미있는 예외 클래스 제공 - 트랜잭션 처리

  • Upload
    kapono

  • View
    50

  • Download
    0

Embed Size (px)

DESCRIPTION

JDBC. ㅇ 데이터베이스 연동 지원 - 템플릿 클래스를 통한 데이터 접근 지원 - 의미있는 예외 클래스 제공 - 트랜잭션 처리 ㅇ Connection / PreparedStatement / ResultSet / try-catch 등 JDBC 중복 코드 제거. JDBC – DataSource 설정. ㅇ JNDI 를 이용한 DataSource - Tomcat 등 WAS 에서 제공하는 DataSource 이용 - 사용 예 1) - PowerPoint PPT Presentation

Citation preview

Page 1: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

ㅇ 데이터베이스 연동 지원 - 템플릿 클래스를 통한 데이터 접근 지원 - 의미있는 예외 클래스 제공 - 트랜잭션 처리

ㅇ Connection / PreparedStatement / ResultSet / try-catch 등 JDBC 중복 코드 제거

JDBC

Page 2: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

ㅇ JNDI 를 이용한 DataSource

- Tomcat 등 WAS 에서 제공하는 DataSource 이용 - 사용 예 1) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:jee=“http://www.springframework.org/schema/jee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

<jee:jndi-lookup id=“dataSource” jndi-name=“jdbc/Oracle” resource-ref=“true” />

<!-- 빈 선언 --> </beans>

JDBC – DataSource 설정

Page 3: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

ㅇ JNDI 를 이용한 DataSource

- 사용 예 2)

<bean id=“dataSource”

class=“org.springframework.jndi.JndiObjectFactoryBean”>

<property name=“jndiName” value=“jdbc/Oracle” />

<property name=“resourceRef” value=“true” />

</bean>

JDBC – DataSource 설정

Page 4: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

ㅇ DriverManager 를 이용한 DataSource

- 커넥션 풀이나 JNDI 를 사용할 수 없는 경우 - 사용 예 )

<bean id=“dataSource”

class=“org.springframework.jdbc.datasource.DriverManagerDataSource

p:driverClassName=“oracle.jdbc.driver.OracleDriver”

p:url=“jdbc:oracle:thin:@localhost:1521:orcl”

p:username=“scott”

p:password=“tiger” />

JDBC – DataSource 설정

Page 5: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

ㅇ Connection Pool 을 이용한 DataSource

- DBCP(Jakarta Commons Database Connection Pool) API 이용 - 사용 예 ) <bean id=“dataSource” class=“org.apache.commons.dbcp.BasicDataSource”

p:driverClassName=“oracle.jdbc.driver.OracleDriver” p:url=“jdbc:oracle:thin:@localhost:1521:orcl” p:username=“scott” p:password=“tiger” />

JDBC – DataSource 설정

※ MySQL

- driverClassName com.mysql.jdbc.Driver

- url jdbc:mysql://localhost:3306/DB

Page 6: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

ㅇ 필요 라이브러리 - spring-jdbc.jar

- spring-tx.jar

- commons-dbcp.jar

- commons-pool.jar

- ojdbc.jar

JDBC – DataSource 설정

Page 7: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

ㅇ JdbcTemplate

- queryForList()

- query()

- queryForObject()

- queryForMap()

- update()

JDBC – Template 사용

조회

삽입 , 수정 , 삭제

Page 8: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

ㅇ JdbcTemplate 사용 예 )

@Autowired private JdbcTemplate jdbcTemplate;

public void selectBoard() { String sql = "SELECT * FROM BOARD WHERE SEQ_NO = ?"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, “1”);

for(int i = 0; i < list.size(); i++) { System.out.println(list.get(i).get("SEQ_NO") + "" + list.get(i).get("TITLE")); } }

public void insertMember() { String sql = "INSERT INTO MEMBER VALUES (“ + “ ?, ?, ?, SYSDATE)"; jdbcTemplate.update(sql, “seorab”, “password”, “kim”); }

JDBC – Template 사용

Page 9: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

config.xml

JDBC

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:annotation-config /><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />

<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /><property name="username" value="scott" /><property name="password" value="tiger" />

</bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<constructor-arg ref="dataSource" /></bean><bean id="boardDao" class="edu.seowon.jdbc.BoardDao" />

</beans>

Page 10: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

Main.java (1 / 2)

JDBC

public class Main {public static void main(String[] args) {

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(

"edu/seowon/jdbc/config.xml");

BoardDao dao = (BoardDao) ctx.getBean("boardDao");List<Map<String, Object>> list = dao.getList();for(int i = 0; i < list.size(); i++) {

System.out.println(list.get(i).get("SEQ_NO") + " // " + (String)list.get(i).get("TITLE"));

}

List<BoardDto> list2 = dao.getList2();for(int i = 0; i < list2.size(); i++) {

System.out.println(list2.get(i).getSeqNo() + " // " + (String)list2.get(i).getTitle());

}

Page 11: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

Main.java (2 / 2)

JDBC

BoardDto board = dao.get();System.out.println(board.getSeqNo() + " // " + board.getTitle());

Map<String, String> map = dao.get2();System.out.println(map.get("seqNo") + " // " + map.get("title"));

Map<String, Object> map2 = dao.get3();System.out.println(map2.get("SEQ_NO") + " // " +

map2.get("TITLE"));

int count = dao.getTotalCount();System.out.println(count);

dao.insertMember(“id", “password", "성명 ", "0108478");}

}

Page 12: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

BoardDto.java

JDBC

public class BoardDto {private String seqNo;private String title;private String content;private String writeId;private String creDate;

public String getSeqNo() {return seqNo;

}

public void setSeqNo(String seqNo) {this.seqNo = seqNo;

}

…. 생략 …}

Page 13: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

BoardDao.java (1 / 6)

JDBC

public class BoardDao {@Autowiredprivate JdbcTemplate jdbcTemplate;

public List<Map<String, Object>> getList() {String sql = "SELECT * FROM BOARD_M1 WHERE SEQ_NO = ?";

List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, "21");

return list;}

Page 14: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

BoardDao.java (2 / 6)

JDBC

public List<BoardDto> getList2() {String sql = "SELECT * FROM BOARD_M1 WHERE SEQ_NO = ?";

List<BoardDto> list = jdbcTemplate.query(sql, new Object[]{"21"},

new RowMapper<BoardDto>() {@Overridepublic BoardDto mapRow(ResultSet rs, int rowNum) throws SQLException {

BoardDto board = new BoardDto();board.setSeqNo(rs.getString("SEQ_NO"));board.setTitle(rs.getString("TITLE"));board.setContent(rs.getString("CONTENT"));board.setWriteId(rs.getString("WRITE_ID"));board.setCreDate(rs.getString("CRE_DATE"));return board;

}});return list;

}

Page 15: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

BoardDao.java (3 / 6)

JDBC

public BoardDto get() {String sql = "SELECT * FROM BOARD_M1 WHERE SEQ_NO = ?";

BoardDto board = jdbcTemplate.queryForObject(sql, new Object[]{"21"}, new RowMapper<BoardDto>() {

@Overridepublic BoardDto mapRow(ResultSet rs, int rowNum) throws SQLException {

BoardDto board = new BoardDto();board.setSeqNo(rs.getString("SEQ_NO"));board.setTitle(rs.getString("TITLE"));board.setContent(rs.getString("CONTENT"));board.setWriteId(rs.getString("WRITE_ID"));board.setCreDate(rs.getString("CRE_DATE"));return board;

}});return board;

}

Page 16: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

BoardDao.java (4 / 6)

JDBC

public Map<String, String> get2() {String sql = "SELECT * FROM BOARD_M1 WHERE SEQ_NO = ?";

Map<String, String> map = jdbcTemplate.queryForObject(sql, new Object[]{"21"}, new RowMapper<Map<String,

String>>() {

@Overridepublic Map<String, String> mapRow(ResultSet rs, int

rowNum) throws SQLException {

Map<String, String> map = new HashMap<String, String>();

map.put("seqNo", rs.getString("SEQ_NO"));map.put("title", rs.getString("TITLE"));return map;

}

});return map;

}

Page 17: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

BoardDao.java (5 / 6)

JDBC

public Map<String, Object> get3() {String sql = "SELECT * FROM BOARD_M1 WHERE SEQ_NO = ?";

Map<String, Object> map = jdbcTemplate.queryForMap(sql, new Object[]{"21"});

return map;}

public int getTotalCount() {String sql = "SELECT COUNT(*) FROM BOARD_M1 WHERE SEQ_NO

= ?";

int count = jdbcTemplate.queryForObject(sql, new Object[]{"21"}, Integer.class);

return count;}

Page 18: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

BoardDao.java (6 / 6)

JDBC

public void insertMember(String id, String pw, String name, String phone) {String sql = "INSERT INTO MEMBER_M1 VALUES (?, ?, ?, ?, SYS-

DATE)";jdbcTemplate.update(sql, id, pw, name, phone);

}}

Page 19: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

JDBC 실습ㅇ config.xml

- dataSource 빈 설정 - jdbcTemplate 빈 설정 (JdbcTemplate)

- ListController 빈 선언 - BoardDao 빈 선언

ㅇ Main.javapublic class Main {

public static void main(String[] args) {

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(

"exam/spring/jdbc/config.xml");Object obj = ctx.getBean("listController");((ListController)obj).process();

}}

Page 20: ㅇ  데이터베이스 연동 지원      -  템플릿 클래스를 통한 데이터 접근 지원      -  의미있는  예외 클래스 제공      -  트랜잭션 처리

JDBC 실습

ㅇ ListController.java

- @Autowired 를 사용하여 BoardDao 주입 - process() 메소드 정의 ㆍ boardDao 의 selectBoard() 실행 후 List 형태로 결과값 받음 ㆍ위에서 받아온 List 데이터 출력

ㅇ BoardDao.java

- @Autowired 를 사용하여 JdbcTemplate 주입 - selectBoard() 메소드 정의 ㆍ queryForList() 메소드를 사용하여 BOARD_M1 테이블 조회