对spring的集成
1,spring和jdbc的组合开发
使用Spring+JDBC集成步骤如下:
//首先配置数据源
<bean id="dataSource
" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
.....//以下是连接池的配置
</bean>
//配置事务。配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间。事务的配置方式有两种:注解方式和基于XML配置方式。采用注解方式:
<bean id="txManager
" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource
" ref="dataSource"/>
</bean>
<!-- 采用@transactional注解方式使用事务 -->
<tx:annotation-driven transaction-manager="txManager
"/>
有些人喜好把数据源的配置信息放在属性文件中,spring提供了获取属性文件内容来配置数据源的方法。
把上面的数据源的配置一一写进属性文件(如:jdbc.properties)中,修改xml配置文件关于数据源的配置部分;
<context:property-placeholder location="jdbc.properties">
<bean id="dataSource
" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="$(driverClassName)"
/>
<property name="url" value="$(url)"/>
<property name="username" value="$(username)"/>
<property name="password" value="$(password)"/>
.....//以下是连接池的配置
</bean>
在程序中可以使用JdbcTemplate,更好的进行对数据库的操作。
示例:使用JdbcTemplate获取一条记录
@Service @Transactional
public class PersonServiceBean implements PersonService{
private JdbcTemplate jdbcTemplate;
@Resource
public void setDataSource(DataSource dataSource){
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public Person getPerson(Integer id){
RowMapper rowMapper
= new RowMapper(){
public Object mapRow(ResultSet rs,int rowNum)throws SQLException{
Person person = new Person();
person.setId(rs.getInt("id"));
person.setName(rs.getString("name"));
return person;
}
};
}
return (Person)jdbcTemplate.queryForObject
("select * from person where id=?",new Object[]{id},new int[]{java.sql.Types.INTEGER},rowMapper
);
}
2,spring2.5和hibernate3.3,struts1.3的整合开发
需要引入的jar包:
hibernate核心安装包下的:
hibernate3.jar
lib\required\*.jar
lib\optional\ehcache-1.2.3.jar
hibernate注解安装包下:
lib\test\slf4j-log4j12.jar
spring安装包下的:
dist\spring.jar
dist\modules\spring-webmvc-struts.jar
lib\jakarta-commons\commons-logging.jar,commons-dbcp.jar,commons-pool.jar
lib\aspectj\aspectjweaver.jar,aspectjrt.jar
lib\cglib\cglib-nodep-2.1_3.jar
lib\j2ee\common-annotations.jar
lib\log4j\log4j-1.2.15.jar
struts
下载struts-1.3.8-lib.zip,需要使用到解压目录下的所有jar,建议把jstl-1.0.2.jar和standard-1.0.2.jar更换为1.1版本。Spring中已经存在一个antlr-2.7.6.jar,所以struts中的antlr-2.7.2.jar删除,避免jar冲突。
数据库驱动jar
spring配置文件:
上面的数据源配置不变,hibernate把sessionFacotory交由spring容器管理,所以要在配置文件中指定sessionFacotory的信息。
示例:
//首先配置数据源
<bean id="dataSource
" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
.....//以下是连接池的配置
</bean>
//hibernate的sessionFacotory的配置
<bean id="sessionFactory
" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource
" ref="dataSource
"/>
<property name="mappingResources
">
<list>
<value>cn/jianchen/bean/Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProerties
">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2dll.auto=update
hibernate.show_sql=true
hibernate.format_sql=false
//以下是对二级缓存的配置
hibernate.cache.use_second_level_cache=true //是否启用二级缓存
hibernate.cache.use_query_cache=false //是否使用查询缓存,因为查询的命中率不高,一般设为false
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider//指明缓存方案的提供者
</value>
</property>
</bean>
//配置事务。
<bean id="txManager
" class="org.springframework.orm.hibernate3.HibernateTransactionManager
">
<property name="sessionFactory" ref="sessionFactory
"/>
</bean>
//开启注解
<tx:annotation-driven transaction-manager="txManager
"/>
示例代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.jianchen.service.impl;
import cn.jianchen.bean.Person;
import cn.jianchen.service.PersonService;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Service;
@Service("personservicebean")
public class PersonServiceBean implements PersonService {
@Resource private SessionFactory sessionFactory; //使用注解的依赖注入
public void save(Person person){
sessionFactory.getCurrentSession().persist(person); //调用的sessionFacotory的getCurrentSession方法返回受spring容器管理的session对象,该session 具有事务管理能力。如果调用openSession方法,返回的session不具备事务能力。
}
public void update(Person person){
sessionFactory.getCurrentSession().merge(person); //调用update方法,是因为传进来的对象一般为脱管对象。否则受session管理的对象根本不需要调用update。使用merge后,传进来的对象仍是脱管对象。如果使用update对象就成为持久对象了。可以参照前面的hibernate讲解部分。
}
public void delete(int personid){
sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession().load(Person.class, personid));//删除的是对象,所以可以根据传进来的id先获得对象,使用load方法,懒加载性能更优。
}
public List getPersons(){
String hql ="from Person";
List list = sessionFactory.getCurrentSession().createQuery(hql).list();
return list;
}
}
前面是spring和hibernate的整合,现在再把struts
整合进来。
在web容器中实例化spring容器:
web.xml文件部分配置:
指定spring的配置文件
,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>class:
beans.xml</param-value>
</context-param>
对spring容器进行实例化
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
分析:实例化的spring容器会放在ServletContexth中*(作为它的一个属性),也就是说从Application中可以获得该spring容器实例,进而使用spring的功能。
spring给我们提供了一个类,让我们从application范围中获得spring容器实例。示例代码:
如果action没有交给spring容器管理,我们通过下面语句获取spring容器实例
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServlet().getServletContext());
在struts配置文件中添加进spring的请求控制器
,该请求控制器会先根据action的path属性值到spring容器中寻找跟该属性值同名的bean。如果寻找到即使用该bean处理用户请求。配置如下:
<controller>
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor
">
</controller>
把action交给spring管理后,我们可以使用依赖注入在action中注入业务层的bean。确保action的path属性于bean的名称相同。
如:
<action path="/person/list
"...>
</action>
Spring配置:
<bean name="/person/list
" class="cn.jianchen.web.action.PersonAction"/>
示意图如下:
分析:根据请求的路径,获取.do的前面部分,作为action的名称。交由请求处理器到spring容器中寻找受管理的相同名字的Action bean。找到后调用该action处理请求。
- 大小: 23.6 KB
分享到:
相关推荐
第4章 SpringSecurity安全详细讲解及应用 第5章 RabbitMQ高级消息的讲解及应用 第6章 ElasticSearch详细讲解及应用 第7章 Eureka分布式服务器的搭建 。。。。。。。。。 第15章 SpringCloud项目实战 。。。。。。。...
Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式你们都知道?Spring系列第6篇:玩转bean scope,避免跳坑里!Spring系列第7篇:依赖注入之手动注入Spring系列第8篇:自动注入...
使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...
第4篇是Spring MVC与MyBatis的项目整合实战,通过对水果网络销售平台的需求分析、功能设计、数据库设计以及模块详细编码实现,让读者了解整合项目开发的整体流程。 《Spring MVC+MyBatis开发从入门到项目实战》对...
使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...
使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...
第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...
《JavaWeb整合开发完全自学...《JavaWeb整合开发完全自学手册》的重点第二篇Struts、第三篇Hibernate、第四篇Spring采用了相似的行文结构,条理清楚,不仅可作为stepbystep的入门书籍,也可作为读者自学的案头参考书。
通过大量的实战编码进行讲解,课程以...第二章:springboot核心功能第三章:热部署的几种模式第四章:Web开发的各种技术第五章:数据访问层:spring data jpa、jdbctemplate、mybatis、redis第六章:异常相关的处理
第四篇:整合Thymeleaf模板] 第五篇:使用JdbcTemplate访问数据库] 第六篇:整合SpringDataJpa] 第七篇:整合Mybatis] 第八篇:通用Mapper与分页插件的集成] 第九篇:整合Lettuce Redis] 第十篇:使用...
第四题 ArrayList LinkedList Vector的区别.pdf docker讲得最清楚.doc Dubbo是什么?能做什么?.doc java 基于TCP协议的Socket编程和通信.doc Java面试高级篇—说说TCP,UDP和socket,Http之间联系和区别.doc MySQL...
Learning李宏毅2021Spring机器学习课程课件及作业B站视频地址: : 课程主页: : 不定期分享读研干货,点赞关注一起进步: ://space.bilibili.com/46880349人工智能技术探讨群:78174903 第一节简介作业HW1:回归第二...
第二篇、第三篇和第四篇分别采用了相似的行文结构,条理清楚地讲解了Struts、Hibernate和Spring三种框架所包含的组件。第五篇则通过Struts+Spring+Hibernate解决方案实现一个完整的应用实例。 全书配合大量的图例及...
第4篇 Spring篇 第22章 Spring的Helloworld程序 第23章 反向控制(Ioc)与装配JavaBean 第24章 Spring中的数据库技术 第25章 Spring的其他高级技术 第5篇 综合实例篇 第26章 Struts 2与Hibernate、Spring的整合 ...
主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...
第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...
第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...
第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...
第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...