Java의 Spring 프레임워크에서 DAO 데이터 액세스 객체의 사용 예

14551 단어 JavaSpring
JDBC Spring DAO
 
Spring에서 제공하는 DAO(데이터 액세스 대상) 지원의 주요 목적은 JDBC, Hibernate 또는 JDO 등 다양한 데이터 액세스 기술을 표준적으로 사용하기 편리하도록 하는 것이다.그것은 당신이 이러한 지구화 기술 사이를 편리하게 전환할 수 있을 뿐만 아니라, 인코딩할 때 각종 기술의 특정한 이상을 처리하는 것을 고려하지 않아도 된다.
JDBC, JDO, Hibernate 등 다양한 데이터 접근 기술을 일치된 방식으로 사용하기 편리하도록 Spring은 추상적인 DAO 클래스를 제공하여 확장할 수 있습니다.이러한 추상적인 클래스는 현재 사용하고 있는 데이터 접근 기술과 관련된 데이터 원본과 다른 설정 정보를 얻을 수 있는 방법을 제공합니다.
Dao 지원 클래스:
JdbcDaoSupport - JDBC 데이터 액세스 객체의 기본 클래스입니다.하위 클래스에 JdbcTemplate를 제공하는 DataSource가 필요합니다.
HibernateDaoSupport - Hibernate 데이터 액세스 객체의 기본 클래스입니다.SessionFactory가 필요하며 하위 클래스에 HibernateTemplate를 제공합니다.HibernateTemplate를 제공함으로써 초기화할 수도 있습니다. 그러면 후자의 설정을 다시 사용할 수 있습니다. 예를 들어SessionFactory,flush모드, 이상번역기(exceptiontranslator) 등입니다.
JdoDaoSupport - JDO 데이터 액세스 객체의 기본 클래스입니다.Persistence Manager Factory를 설정하고 하위 클래스에 JdoTemplate를 제공해야 합니다. 
JpaDaoSupport - JPA 데이터 액세스 객체의 기본 클래스입니다.하위 클래스에 JpaTemplate를 제공하는 Entity Manager Factory가 필요합니다. 
이 섹션에서는 JdbcDaoSupport에 대한 Sping의 지원을 다룹니다.
다음은 예입니다.

drop table if exists user; 

/*==============================================================*/ 
/* Table: user                         */ 
/*==============================================================*/ 
create table user 
( 
  id          bigint AUTO_INCREMENT not null, 
  name         varchar(24), 
  age         int, 
  primary key (id) 
);

 

public class User { 
  private Integer id; 
  private String name; 
  private Integer age; 

  public Integer getId() { 
    return id; 
  } 

  public void setId(Integer id) { 
    this.id = id; 
  } 

  public String getName() { 
    return name; 
  } 

  public void setName(String name) { 
    this.name = name; 
  } 

  public Integer getAge() { 
    return age; 
  } 

  public void setAge(Integer age) { 
    this.age = age; 
  } 
}

 

/** 
* Created by IntelliJ IDEA.<br> 
* <b>User</b>: leizhimin<br> 
* <b>Date</b>: 2008-4-22 15:34:36<br> 
* <b>Note</b>: DAO  
*/ 
public interface IUserDAO { 
  public void insert(User user); 

  public User find(Integer id); 
}
 
 
import javax.sql.DataSource; 
import java.sql.Connection; 
import java.sql.SQLException; 

/** 
* Created by IntelliJ IDEA.<br> 
* <b>Note</b>:  DAO,  
*/ 
public class BaseDAO { 
  private DataSource dataSource; 

  public DataSource getDataSource() { 
    return dataSource; 
  } 

  public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
  } 

  public Connection getConnection() { 
    Connection conn = null; 
    try { 
      conn = dataSource.getConnection(); 
    } catch (SQLException e) { 
      e.printStackTrace(); 
    } 
    return conn; 
  } 
}
 
 
/** 
* Created by IntelliJ IDEA.<br> 
* <b>User</b>: leizhimin<br> 
* <b>Date</b>: 2008-4-22 15:36:04<br> 
* <b>Note</b>: DAO  
*/ 
public class UserDAO extends BaseDAO implements IUserDAO { 

  public JdbcTemplate getJdbcTemplate(){ 
    return new JdbcTemplate(getDataSource()); 
  } 
  public void insert(User user) { 
    String name = user.getName(); 
    int age = user.getAge().intValue(); 

//    jdbcTemplate.update("INSERT INTO user (name,age) " 
//        + "VALUES('" + name + "'," + age + ")"); 

    String sql = "insert into user(name,age) values(?,?)"; 
    getJdbcTemplate().update(sql,new Object[]{name,age}); 
  } 

  public User find(Integer id) { 
    List rows = getJdbcTemplate().queryForList( 
        "SELECT * FROM user WHERE id=" + id.intValue()); 

    Iterator it = rows.iterator(); 
    if (it.hasNext()) { 
      Map userMap = (Map) it.next(); 
      Integer i = new Integer(userMap.get("id").toString()); 
      String name = userMap.get("name").toString(); 
      Integer age = new Integer(userMap.get("age").toString()); 

      User user = new User(); 

      user.setId(i); 
      user.setName(name); 
      user.setAge(age); 

      return user; 
    } 
    return null; 
  } 
}

 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
    "http://www.springframework.org/dtd/spring-beans.dtd"> 

<beans> 
  <bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" singleton="true"> 
    <property name="driverClassName"> 
      <value>com.mysql.jdbc.Driver</value> 
    </property> 
    <property name="url"> 
      <value>jdbc:mysql://localhost:3306/springdb</value> 
    </property> 
    <property name="username"> 
      <value>root</value> 
    </property> 
    <property name="password"> 
      <value>leizhimin</value> 
    </property> 
  </bean> 

  <bean id="baseDAO" class="com.lavasoft.springnote.ch05_jdbc03_temp.BaseDAO" abstract="true">
    <property name="dataSource"> 
      <ref bean="dataSource"/> 
    </property> 
  </bean> 

  <bean id="userDAO" 
     class="com.lavasoft.springnote.ch05_jdbc03_temp.UserDAO" parent="baseDAO"> 
  </bean> 

</beans>

 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.FileSystemXmlApplicationContext; 

/** 
* Created by IntelliJ IDEA.<br> 
* <b>User</b>: leizhimin<br> 
* <b>Date</b>: 2008-4-22 15:59:18<br> 
* <b>Note</b>:  ,  
*/ 
public class SpringDAODemo { 
  public static void main(String[] args) { 
    ApplicationContext context = new FileSystemXmlApplicationContext("D:\\_spring\\src\\com\\lavasoft\\springnote\\ch05_jdbc03_temp\\bean-jdbc-temp.xml"); 
    User user = new User(); 
    user.setName("hahhahah"); 
    user.setAge(new Integer(22)); 
    IUserDAO userDAO = (IUserDAO) context.getBean("userDAO"); 
    userDAO.insert(user); 
    user = userDAO.find(new Integer(1)); 
    System.out.println("name: " + user.getName()); 
  } 
}

 
실행 결과:

log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory). 
log4j:WARN Please initialize the log4j system properly. 
name: jdbctemplate 

Process finished with exit code 0



Spring DAO의 Hibernate
 
HibernateDaoSupport - Hibernate 데이터 액세스 객체의 기본 클래스입니다.SessionFactory가 필요하며 하위 클래스에 HibernateTemplate를 제공합니다.HibernateTemplate를 제공함으로써 초기화할 수도 있습니다. 그러면 후자의 설정을 다시 사용할 수 있습니다. 예를 들어SessionFactory,flush모드, 이상번역기(exceptiontranslator) 등입니다.
이 섹션에서는 HibernateTemplate에 대한 Sping의 지원을 다룹니다.
다음은 예입니다.
 

drop table if exists user; 

/*==============================================================*/ 
/* Table: user                         */ 
/*==============================================================*/ 
create table user 
( 
  id          bigint AUTO_INCREMENT not null, 
  name         varchar(24), 
  age         int, 
  primary key (id) 
); 

 

/** 
* Created by IntelliJ IDEA.<br> 
* <b>Note</b>: Hiberante  
*/ 
public class User { 
  private Integer id; 
  private String name; 
  private Integer age; 

  public Integer getId() { 
    return id; 
  } 

  public void setId(Integer id) { 
    this.id = id; 
  } 

  public String getName() { 
    return name; 
  } 

  public void setName(String name) { 
    this.name = name; 
  } 

  public Integer getAge() { 
    return age; 
  } 

  public void setAge(Integer age) { 
    this.age = age; 
  } 
}

 

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-mapping 
  PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 

  <class name="com.lavasoft.springnote.ch06_hbm_02deTx.User" 
      table="user"> 

    <id name="id" column="id"> 
      <generator class="native"/> 
    </id> 

    <property name="name" column="name"/> 

    <property name="age" column="age"/> 

  </class> 

</hibernate-mapping>

 

/** 
* Created by IntelliJ IDEA.<br> 
* <b>User</b>: leizhimin<br> 
* <b>Date</b>: 2008-4-23 15:37:43<br> 
* <b>Note</b>: DAO  
*/ 
public interface IUserDAO { 
  public void insert(User user); 
  public User find(Integer id); 
} 
 
import org.hibernate.SessionFactory; 
import org.springframework.orm.hibernate3.HibernateTemplate; 

/** 
* Created by IntelliJ IDEA.<br> 
* <b>User</b>: leizhimin<br> 
* <b>Date</b>: 2008-4-23 15:15:55<br> 
* <b>Note</b>: DAO  
*/ 
public class UserDAO implements IUserDAO { 
  private HibernateTemplate hibernateTemplate; 

  public void setSessionFactory(SessionFactory sessionFactory) { 
    this.hibernateTemplate =new HibernateTemplate(sessionFactory); 
  } 

  public void insert(User user) { 
    hibernateTemplate.save(user); 
    System.out.println(" User ID:"+user.getId()); 
  } 

  public User find(Integer id) { 
    User user =(User) hibernateTemplate.get(User.class, id); 
    return user; 
  } 
}

 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
  <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName"> 
      <value>com.mysql.jdbc.Driver</value> 
    </property> 
    <property name="url"> 
      <value>jdbc:mysql://localhost:3306/springdb</value> 
    </property> 
    <property name="username"> 
      <value>root</value> 
    </property> 
    <property name="password"> 
      <value>leizhimin</value> 
    </property> 
  </bean> 

  <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" 
     destroy-method="close"> 
    <property name="dataSource"> 
      <ref bean="dataSource"/> 
    </property> 
    <property name="mappingResources"> 
      <list> 
        <value>com/lavasoft/springnote/ch06_hbm_02proTx/User.hbm.xml</value> 
      </list> 
    </property> 
    <property name="hibernateProperties"> 
      <props> 
        <prop key="hibernate.dialect"> 
          org.hibernate.dialect.MySQLDialect 
        </prop> 
      </props> 
    </property> 
  </bean> 


  <bean id="userDAO" class="com.lavasoft.springnote.ch06_hbm_02proTx.UserDAO"> 
    <property name="sessionFactory"> 
      <ref bean="sessionFactory"/> 
    </property> 
  </bean> 
</beans>

 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.FileSystemXmlApplicationContext; 

/** 
* Created by IntelliJ IDEA.<br> 
* <b>Note</b>:  、  
*/ 
public class SpringHibernateDemo { 
  public static void main(String[] args) { 
    ApplicationContext context =new FileSystemXmlApplicationContext("D:\\_spring\\src\\com\\lavasoft\\springnote\\ch06_hbm_02proTx\\bean-hbm_tx.xml"); 

    //  DAO  
    IUserDAO userDAO = (IUserDAO) context.getBean("userDAO"); 

    User user = new User(); 
    user.setName("caterpillar"); 
    user.setAge(new Integer(30)); 

    userDAO.insert(user); 

    user = userDAO.find(new Integer(1)); 

    System.out.println("name: " + user.getName()); 
  } 
}

 
실행 결과:

log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory). 
log4j:WARN Please initialize the log4j system properly. 
 User ID:18 
name: jdbctemplate 

Process finished with exit code 0

좋은 웹페이지 즐겨찾기