Java의 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의 HibernateHibernateDaoSupport - 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.