Annotation 기반 Hibernate 3.3 + Spring 2.5 통합 개발
9981 단어 springHibernateannotation
현재, 우 리 는 Spring 의 지원 에 가입 합 니 다. spring - framework - 2.5.5 \ dist 의 spirng. jar 를 우리 프로젝트 의 lib 디 렉 터 리 에 도입 하고, aspectjweaver. jar 패 키 지 를 추가 하여 절단면 프로 그래 밍 을 지원 합 니 다.
필요 한 프로필 은 다음 과 같 습 니 다:
applicationContext-common.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!– SessionFactory, Spring Hibernate –>
<!– Annotation , org.springframework.orm.hibernate3.LocalSessionFactoryBean,
setMappingResources(), Hibernate Annotation
mapping resource, mapping class, LocalSessionFactoryBean
AnnotationSessionFactoryBean . org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
setAnnotatedClasses, Hibernate mapping class. . –>
<bean id=”sessionFactory”class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name=”configLocation”>
<value>classpath:hibernate.cfg.xml</value>
</property>
</brean>
<!– –>
<bean id=”transactionManager”>
<property name=”sessionFactory”>
<ref bean=”sessionFactory” />
</property>
</bean>
<!– –>
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
<tx:attributes>
<tx:method name=”save*” propagation=”REQUIRED” />
<tx:method name=”update*” propagation=”REQUIRED” />
<tx:method name=”delete*” propagation=”REQUIRED” />
<tx:method name=”*” read-only=”true” />
</tx:attributes>
</tx:advice>
<!– –>
<aop:config>
<aop:pointcut id=”allServiceMethod” expression=”execution(* com.rong.dao.*.*.*(..))” />
<aop:advisor pointcut-ref=”allServiceMethod” advice-ref=”txAdvice” />
</aop:config>
<!– Spring Annotation –>
<context:annotation-config/>
<!– Spring Bean –>
<context:component-scan base-package=”com.rong”/>
<!–
<bean id=”userDao”>
<property name=”sessionFactory” ref=”sessionFactory”/>
</bean>
<bean id=”userService”>
<property name=”userDao” ref=”userDao”/>
</bean>
–>
</beans>
:
<!– Spring Annotation –>
<context:annotation-config/>
<!– Spring Bean –>
<context:component-scan base-package=”com.rong”/>
이렇게 설정 하면 위 에서 설명 한 DAO 층 과 Service 층 등 설정 코드 를 생략 합 니 다.편 하 죠?이 부분의 XML 코드 에 대하 여 우 리 는 다음 에 또 설명 할 것 이다.
우리 의 DAO 층 을 개발 합 시다. 인 터 페 이 스 는 다음 과 같 습 니 다.
package com.rong.dao;
import java.util.List;
import com.rong.entity.User;
public interface UserDao {
public void save(User user);
public void delete(int id);
public void update(User user);
public List<User> query();
public User get(int id);
}
DAO 층 의 실현 클래스:
package com.rong.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.rong.entity.User;
@Repository(“userDao”) //
public class UserDaoBean extends MyHibernateDaoSupport implements UserDao {
public void save(User user){
super.getHibernateTemplate().save(user);
}
public void delete(int id){
super.getHibernateTemplate().delete(super.getHibernateTemplate().load(User.class, id));
}
public void update(User user){
super.getHibernateTemplate().update(user);
}
@SuppressWarnings(“unchecked”)
public List<User> query(){
return super.getHibernateTemplate().find(“from User”);
}
public User get(int id){
return (User)super.getHibernateTemplate().get(“from User”, id);
}
}
보시 다시 피 저희 가 계승 한 것 은 HibernateDao Support 가 아니 라 제 가 직접 작성 한 MyHibernateDao Support 입 니 다.그 코드 는 다음 과 같다.
package com.rong.dao;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class MyHibernateDaoSupport extends HibernateDaoSupport {
@Resource(name=”sessionFactory”) // HibernateDaoSupport sessionFactory
public void setSuperSessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
}
우리 가 HibernateDao Support 를 바 꾸 려 고 하 는 이 유 는 내 가 DAO 층 의 클래스 에 Session Factory 라 는 속성 을 주입 해 야 하기 때문이다.앞으로 우리 가 개발 한 DAO 류 는 이 MyHibernateDao Support 를 직접 다시 사용 할 수 있 습 니 다.사실 이렇게 하 는 것 은 파일 설정 방식 에 해당 하 는 코드 입 니 다.
<bean id=”userDao”>
<property name=”sessionFactory” ref=”sessionFactory”/>
</bean>
XML 파일 대신 annotation 을 사용 하려 면 원래 처럼 session Factory 를 사용 할 수 있 도록 해 야 하기 때문에 MyHibernate Dao Support 에 Session Factory 를 주입 합 니 다.하위 클래스 가 이 클래스 를 계승 할 때 도 Annotation 을 계승 한다.이렇게 하면 우 리 는 Session Factory 의 주입 을 실현 할 수 있다.
지금까지 애플 리 케 이 션 Context - comon. xml 의
<bean id=”sessionFactory”>
<property name=”configLocation”>
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
우 리 는 평소에 Hibernate 와 Spring 통합 을 개발 할 때 org. springframework. orm. hibernate 3. Local Session Factory Bean 을 사용 하여 Session Factory 를 제공 하 는데, 우 리 는 org. springframework. orm. hibernate 3. annotation Session Factory Bean 으로 바 꿔 야 한다.사실은 이 렇 습 니 다. 저 희 는 Hibernate. cfg. xml 에서 설정 한 실체 클래스 맵 방식 은 다음 과 같 습 니 다.
<!–
<mapping resource=”com/rong/entity/User.hbm.xml”/>
<!– Hibernate User , resource –>
<mapping/>
–>
Hibernate 의 실체 클래스 가 주 해 를 지원 하도록 하려 면 xxx. hbm. xml 파일 을 제거 해 야 합 니 다. 따라서 우 리 는 mapping class 방식 을 사용 합 니 다. mapping resource 방법 이 아 닙 니 다.그러나 LocalSession Factory Bean 과 같은 종 류 는 실체 클래스 맵 방식 으로 mapping resource 를 사용 합 니 다. (자세 한 내용 은 LocalSession Factory Bean 과 같은 소스 코드 를 참조 할 수 있 습 니 다)만약 우리 가 설정 에서 여전히 이 종 류 를 사용한다 면, Hibernate 와 Spring 을 통합 할 때, 오 류 를 보고 할 것 입 니 다.한편, AnnotationSession Factory Bean 과 같은 종 류 는 LocalSession Factory Bean 을 바탕 으로 mapping class 방식 으로 실체 클래스 맵 을 실현 합 니 다 (상세 한 것 은 AnnotationSession Factory Bean 류 의 소스 코드 참조).
서비스 층 의 코드 를 다시 보 겠 습 니 다.
package com.rong.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.rong.dao.UserDao;
import com.rong.entity.User;
@Service(“userService”) //
public class UserServiceBean implements UserService {
@Autowired
private UserDao userDao;
public void save(User user){
userDao.save(user);
}
}
우리 가 사용 하 는 주해 위 에 일반적으로 주석 을 달 았 으 니, 더 이상 서술 하지 않 는 다.Autowired 와 @ Resource 기능 의 차이 가 많 지 않 습 니 다. 대상 을 주입 하 는 것 은 < bean > 설정 에 해당 하 는 기능 입 니 다.
좋아, 이렇게 개발 되 었 으 니 뭘 잊 어 버 린 거 아니 야?웹. xml, 부분 코드 를 설정 해 야 합 니 다.
<!– Spring –>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-*.xml</param-value>
</context-param>
<!– Spring –>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
사실, 지금까지 우 리 는 우리 의 XML 프로필 이 여전히 많다 는 것 을 알 았 다.사실, 이렇게 생각해 보면 지난 단계 에 우 리 는 xxx. hbm. xml 와 같은 파일 을 생략 했 습 니 다. 이 단 계 는 < bean id = "" "> < property name =" "ref =" > 와 같은 설정 항목 을 적 게 사 용 했 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.