Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 06 데이터베이스 연동 지원 작성자 : 장은호 소속팀 : 네이버메인개발 작성년월일 : 2009.08.26.

Similar presentations


Presentation on theme: "Chapter 06 데이터베이스 연동 지원 작성자 : 장은호 소속팀 : 네이버메인개발 작성년월일 : 2009.08.26."— Presentation transcript:

1 Chapter 06 데이터베이스 연동 지원 작성자 : 장은호 소속팀 : 네이버메인개발 작성년월일 : 2009.08.26

2 목차 1. 스프링의 데이터베이스 연동 지원 2.DataSource 설정 3. 스프링의 JDBC 지원 4.iBATIS/ 하이버네이트 /JPA 연동 지원

3 1. 스프링의 데이터베이스 연동 지원

4  중복된 코드 제거를 위한 템플릿 클래스 제공 (GoF 의 템플릿 패턴 ) Connection conn = null; … try { conn = getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(“…”); } catch(SQLException e) { … } finally { … if(conn != null) conn.close(); }  DaoSupport : DAO 에서 사용하는 기본적인 기능을 제공, 상속받아서 사용  구체적인 Exception 을 발생시킴

5 2. DataSource 설정

6 2.1. 커넥션 풀을 이용한 Datasource 설정 <bean id="dataSource” class="org.apache.commons.dbcp.BasicDataSource" p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost/test" p:userName="test" p:password="1234" />  dataSource : DAO 가 데이터에 접근하기 위한 포인트  DBCP(Jakarta Commons Database Connection Pool) API(connection library) 이용

7 2.2. JNDI 를 이용한 DataSource 설정 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:p="http://www.springframework.org/schema/p" 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-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-j22-2.5.xsd">  JEE App server, Tomcat, Resin 등 web container 사용하는 경우 태그 사용하여 JNDI 에 등록된 객체명 명시

8 2.3. DriverManager 를 이용한 DataSource 설정 <bean id=“dataSource“ class=“org.springframework.jdbc.dataSource.DriverManagerDataSource” p:driverClassName=“com.mysql.jdbc.Driver” p:url=“jdbc:mysql://localhost/test” p:username=“test” p:password=“root” />

9 2.4. DataSource 로부터 Connection 구하기 public class JdbcMessageDao omplements MessageDao { private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource=dataSource; } @Override public int selectCount() { Connection conn=null; try { // conn=dataSource.getConnection(); conn=DataSourceUils.getConnection(dataSource); } finally { // JdbcUtils.closeConnection(conn); datasourceutils.releaseConnection(conn,dataSource); }  DataSource 로부터 Connection 구하기  getConnection() 활용하면 되나 스프링이 제공하는 트랜잭션 관리 기능 활용할 수 없음  이를 방지하기 위해 DataSourceUtils 클래스를 이용하여 connection 을 구하고 반환함.

10 3. 스프링의 JDBC 지원

11 3.1. JdbcTemplate 클래스를 이용한 JDBC 프로그래밍 <bean id=“dataSource” class=“org.apache.commons.dbcp.BasicDataSource” p:driverClassName=“com.mysql.jdbc.Driver” p:url=“jdbc:mysql://localhost/test” p:username=“test” p:password=“1234” /> <bean id=“jdbcTemplate” class=“org.springframework.jdbc.core.JdbcTemplate” p:dataSource-ref=“dataSource” /> <bean id=“messageDao” class=“JdbcTemplateMessageDao” p:jdbcTemplate-ref=“jdbcTemplate” /> jdbcTemplate p:dataSource-ref dataSource messageDao p:jdbcTemplate-ref

12 3.1. JdbcTemplate 클래스를 이용한 JDBC 프로그래밍 Private static final string INSERT_SQL = “insert into GUESTBOOK” + “(GUEST_NAME,CONTENT) values (?,?)”; Public void insert(Message message){ jdbcTemplate.update(INSERT_SQL, new Object[]{message.getGuestName(),message.getContent()}); } private static final String SELECT_SQL = "select * from GUESTBOOK desc limit ?,?"; public List selectList(int page,int size) { List list=jdbcTemplate.query(SELECT_SQL,new Object[] {page, size}, new RowMapper(){ @Override public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Message message = new Message(); message.setId(rs.getInt("ID")); message.setName(rs.getString("NAME")); message.setContent(rs.getString("CONTENT")); } }); return list; }  List query(SQL query(SELECT), arguments, Results) : Prepared statement  List query(SQL query(SELECT), Results) : 정적 SQL  int update(SQL query(INSERT, UPDATE, DELETE), (arguments)) : Prepared SQL  int update(SQL query(INSERT, UPDATE, DELETE) : static SQL 결과값을 원하는 방식으로 가공하여 리턴

13 3.2. NamedParameterJdbcTemplate 클래스를 이용한 JDBC 프로그래밍 private static final String SELECT_SQL = "select * from GUESTBOOK desc limit :startRow, :size"; public List selectList(int page,int size) { Map params = new HashMap (); params.put("startRow",startRow); params.put("size",size); List list=jdbcTemplate.query(SELECT_SQL,params, new RowMapper(){ @Override public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Message message = new Message(); message.setId(rs.getInt("ID")); message.setName(rs.getString("NAME")); message.setContent(rs.getString("CONTENT")); } }); return list; }  이름 기반의 파라미터 설정 (MAP 형식 )

14 3.3. SimpleJdbcTemplate 클래스를 이용한 JDBC 프로그래밍 private static final String SELECT_SQL = "select * from GUESTBOOK desc limit ?,?"; public List selectList(int page,int size) { List list=jdbcTemplate.query(SELECT_SQL,new ParameterizedRowMapper (){ @Override public Message mapRow(ResultSet rs, int rowNum) throws SQLException { Message message = new Message(); message.setId(rs.getInt("ID")); message.setName(rs.getString("NAME")); message.setContent(rs.getString("CONTENT")); return message; } }, page, size); return list; }  이름 기반의 파라미터 사용 : query(SQL, ParameterizedRowMapper, Map args)  가변 인수 사용 : query(SQL, ParameterizedRowMapper, Object … args)

15 4. iBATIS/Hibernate/JPA 연동 지원

16 sqlMapClient dataSource configLocation sqlMapConfig.xml GuestBook.xml sqlMapClient Template sqlMapClient-ref messageDAO sqlMapClient Template-ref dataSource, iBATIS 설정파일 명시 매핑 설정파일을 명시 매핑할 SQL 구문 Template : - 코드 중복을 없애고 -SQLException 을 스프링이 제공하는 예외 클래스로 변환하고 - iBATIS 의 sqlMapClient 와 거의 동일 한 메소드 제공 Template 을 이용해서 실제로 iBATIS 사용 4. iBatis

17 <bean id="sqlMapClient” class="org.springframework.orm.ibatis.SqlMapClientFactoryBean" p:dataSource-ref="dataSource” p:configLocation="WEB_INF/sqlMap/sqlMapConfig.xml"> <bean id="messageDao” class="org.springframework.orm.ibatis.iBatisMessageDao” p:sqlMapClientTemplate-ref="sqlMapClientTemplate"> <!DOCTYPE sqlMapConfig PUBLIC "-//ibais.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <!DOCTYPE sqlMapConfig PUBLIC "-//ibais.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMap namespace="GuestBook" select * from GUESTBOOK_MESSAGE order by GUESTBOOK_MESSAGE_ID desc limit #startRow#, #size#

18 sessionFactory dataSource mappingResource Message.hbm.xml Hibernate Template sessionFactory-ref messageDAO hibernate Template-ref Session == connection dataSource, Hibernate 설정파일 명시 매핑 정보를 담고 있는 설정파 일 Template : - 코드 중복 (try-catch) 방지 - 스프링이 제공하는 예외에 맞게 변환 Template 을 이용해서 실제 로 Hibernate 사용 4. Hibernate

19 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean“ hibernate/Message.hbm.xml org.hibernate.dialect.MySQLInnoDBDialect <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate” p:ssesionFactory-ref="ssesionFactory" />

20 4. Hibernate  Hibernate Session 이 제공하는 메서드 (get(), load(), save() 등 ) 를 동일하게 제공  Hibernate Query 를 생성하지 않고 사용할 수 있는 find() List find(String queryString) List findByNamedParam(String queryString, String[] paramNames, Object[] values)  Hibernate 의 NamedQuery 실행 메소드 findByNamedQuery(String queryName)  Criteria 실행 메소드 List findByCriteria(DetachedCriteria criteria)

21 Thank you.


Download ppt "Chapter 06 데이터베이스 연동 지원 작성자 : 장은호 소속팀 : 네이버메인개발 작성년월일 : 2009.08.26."

Similar presentations


Ads by Google