接上篇:
(8)下面我们写一个业务Bean来操作实体:
为了面向接口编程我们先创建一个接口:PersonService
package com.java.service;
import java.util.List;
import com.java.entity.Person;
public interface PersonService {
public abstract void save(Person person);
public abstract void update(Person person);
public abstract Person getPerson(Integer id);
public abstract void delete(Integer id);
public abstract List<Person> getPersons();
}
然后创建这个接口的实现类并且配置事务和注入sessionFactory:
package com.java.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.java.entity.Person;
import com.java.service.PersonService;
@Transactional
public class PersonServiceImpl implements PersonService {
@Resource
private SessionFactory sessionFactory;
public void save(Person person){
sessionFactory.getCurrentSession().persist(person);
}
public void update(Person person){
sessionFactory.getCurrentSession().merge(person);
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public Person getPerson(Integer id){
return (Person)sessionFactory.getCurrentSession().get(Person.class, id);
}
public void delete(Integer id){
sessionFactory.getCurrentSession().delete(
sessionFactory.getCurrentSession().load(Person.class, id));
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
@SuppressWarnings("unchecked")
public List<Person> getPersons(){
return sessionFactory.getCurrentSession().createQuery("FROM Person").list();
}
}
备注:上面的sessionFactory
应用了@Resource,把SessionFactory实例注入给sessionFactory。
Transactional表示在操作该类时,需要事务管理。
另外在查询数据时应该用只读事务,这样可以提高性能:
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)。
(9)最后我们对这个类创建单元测试(Junit):因为在单元测试中需要获取PersonServiceImpl实例,所以还需要在beans.xml文件中配置如下:
<bean id="personService
" class="com.java.service.impl.PersonServiceImpl"/>
下面把完整的spring配置文件复制如下:
<?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">
<!-- 打开利用注解方式依赖注入 -->
<context:annotation-config/>
<!-- 连接池的配置 -->
<bean id="dataSource
" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
<!-- 连接池启动时的初始值 -->
<property name="initialSize" value="1"/>
<!-- 连接池的最大值 -->
<property name="maxActive" value="500"/>
<!-- 最大空闲值 -->
<property name="maxIdle" value="2"/>
<!-- 最小空闲值. -->
<property name="minIdle" value="1"/>
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory
" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource
"/>
<property name="mappingResources
">
<list>
<value>com/java/entity/Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.OracleDialect
hibernate.hbm2ddl.auto=update
<!-- 测试阶段使用 -->
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
<!-- 配置事务管理 -->
<bean id="txManager
" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory
"/>
</bean>
<!-- 基于注解方式 -->
<tx:annotation-driven transaction-manager="txManager
"/>
<bean id="personService
" class="com.java.service.impl.PersonServiceImpl"/>
</beans>
====================================
package com.java.junit;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.java.entity.Person;
import com.java.service.PersonService;
public class PersonTest {
private static PersonService personService;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml"
);
personService=(PersonService)ctx.getBean("personService
");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testSave() {
personService.save(new Person("oracle"));
}
@Test
public void testUpdate() {
Person person=personService.getPerson(41);
person.setName("oracle41");
personService.update(person);
}
@Test
public void testGetPerson() {
Person person=personService.getPerson(42);
System.out.println(person.getId()+"-->"+person.getName());
}
@Test
public void testDelete() {
personService.delete(43);
}
@Test
public void testGetPersons() {
List<Person> persons=personService.getPersons();
for(Person person:persons){
System.out.println(person.getId()+"-->"+person.getName());
}
}
}
接下来运行单元测试,测试完成,没有出错的话我们基本上就完成了spring+hibernate的整合了。
分享到:
相关推荐
标题中的"spring3.0+hibernate3.6+struts2.38整合包加配置文件下载"指的是一个包含三个关键Java EE框架——Spring 3.0、Hibernate 3.6和Struts 2.38的集成开发环境。这个整合包是为了简化开发者在搭建基于这些技术的...
标题中的"CXF2.7+SPRING3.0.5+HIBERNATE3.6final+STRUTS2"代表了一个集成开发环境,其中包含了四个关键的技术框架:Apache CXF 2.7、Spring 3.0.5、Hibernate 3.6 Final以及Struts2。这些框架在Java Web开发中起着...
SSH框架整合是Java Web开发中常见的一种技术组合,由Spring、Struts2和Hibernate三个开源框架构成,分别负责控制层、表现层和持久层的管理。这个实例是基于Spring 2.5、Struts2.3和Hibernate 3.6进行集成,用于实现...
标题 "spring 3.0.4 + hibernate3.6 + mybatis3.0.4 + struts 2.1.8 + freemarker 整合" 描述了一个经典的Java Web开发集成框架,用于构建高效、可扩展的Web应用程序。这个组合在过去的几年里非常流行,因为它将多个...
csdn只能上传50MB的,不够用,我上传的是网盘的下载地址,包含PDF和源码,PDF是226MB的清晰完整版,源码也是完整的。 附:源码使用方式,看到有.project的的,可以直接通过import导到myeclipse里面,没有这个文件的...
Struts2、Spring3和Hibernate3.6是Java开发中非常经典的三大框架组合,它们各自在Web应用开发中承担着不同的职责,共同构建了一个高效、灵活的企业级应用开发环境。 Struts2作为MVC(Model-View-Controller)架构的...
在"struts2.2+spring3.05+hibernate3.6整合"项目中,我们将看到如何将这三个框架协同工作,实现一个基于MySQL数据库的应用程序。Struts2.2版本提供了更好的Action类支持和拦截器功能,Spring3.05加强了AOP(面向切面...
在本项目中,我们探讨了如何整合Spring 3.0、Hibernate 3.6和Struts2.2.1这三大框架,以构建一个高效、灵活的企业级Web应用程序。这三者结合,提供了模型-视图-控制器(MVC)架构、持久层管理和AOP(面向切面编程)...
Struts2.3、Spring3.1和Hibernate3.6是三个非常重要的Java Web开发框架,它们的整合在企业级应用开发中极为常见。这个压缩包"Struts2.3+Spring3.1+Hibernate3.6整合的jar包(全)"包含了进行SSH整合所需的全部依赖库,...
SSHJ (Spring、Struts2、Hibernate 和 jBPM) 是一个经典的 Java 开发框架组合,用于构建企业级的 Web 应用程序。这个集成项目是基于特定版本的这些技术,包括jbpm4.4(业务流程管理),spring2.5.6(依赖注入和事务...
笔者开发时所用到的软件: apache-tomcat-7.0.25.exe eclipse-jee-indigo-SR2-win32.zip mysql-5.5.20-win32.msi navicat100_mysql_en.zip ...适合于初学Struts2+Spring+Hibernate的开发人员参考学习。
学习JEEE的经典教材,由李刚老师编著,这是最新的第三版,第3版保持了第2版内容全面、深入的特点,主要完成全部知识的升级。该书在2011年2月由电子工业出版社出版 由于上传文件大小限制本书被压缩为四个部分,此附件...
本整合包"struts2.3+spring3.1+hibernate3.6"提供了这三大框架的最新版本,便于开发者进行快速开发。 Struts2是MVC(Model-View-Controller)架构的实现,主要负责处理HTTP请求,提供了一种组织业务逻辑和表现层的...
Struts2.2、Spring3.1和Hibernate3.6是经典的Java企业级开发框架组合,常被用于构建高效、可扩展的Web应用程序。这个整合示例提供了登录功能以及基本的CRUD(创建、读取、更新、删除)操作,帮助开发者理解如何将这...
EXT JS 2.1负责前端交互和UI展示,Struts 2.0作为MVC框架处理HTTP请求和业务逻辑,Spring 2.5提供依赖注入和事务管理,以及与Struts 2和Hibernate的整合,而Hibernate则处理数据持久化,实现了对象和数据库表之间的...
【Struts2.3+Spring3.1+Hibernate3.6整合开发】 Struts2.3、Spring3.1和Hibernate3.6是Java企业级应用中常用的三大框架,它们的整合开发能够实现MVC(Model-View-Controller)模式,提供强大的数据持久化、业务逻辑...
这个"struts2.2.1+spring 3.0.3+hibernate3.6+dwr3.0全注解整合包"是将这些框架结合在一起,使用注解方式配置,简化了传统的XML配置文件,提高了开发效率和代码的可读性。以下是关于这四个框架及其整合的知识点: 1...
标题中的"sturts2.3.15.1+Spring3.2+hibernate3.6整合"指的是在Web开发中使用Struts2、Spring和Hibernate这三种技术进行集成开发的一个项目版本配置。SSH(Struts2、Spring、Hibernate)是Java企业级应用中常见的...