`
jianchen
  • 浏览: 336203 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring学习之第四篇

阅读更多

对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&amp;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&amp;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
分享到:
评论

相关推荐

    SpringCloud视频教程全套百度网盘

    第4章 SpringSecurity安全详细讲解及应用 第5章 RabbitMQ高级消息的讲解及应用 第6章 ElasticSearch详细讲解及应用 第7章 Eureka分布式服务器的搭建 。。。。。。。。。 第15章 SpringCloud项目实战 。。。。。。。...

    JAVA spring 系列案例50个和学习资料

    Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式你们都知道?Spring系列第6篇:玩转bean scope,避免跳坑里!Spring系列第7篇:依赖注入之手动注入Spring系列第8篇:自动注入...

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    Spring MVC+MyBatis开发从入门到项目实战

    第4篇是Spring MVC与MyBatis的项目整合实战,通过对水果网络销售平台的需求分析、功能设计、数据库设计以及模块详细编码实现,让读者了解整合项目开发的整体流程。 《Spring MVC+MyBatis开发从入门到项目实战》对...

    《精通Spring2.X企业应用开发详解》16-19章

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    《精通Spring2.X企业应用开发详解》20-23

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...

    Java Web整合开发完全自学手册:Struts+Hibernate+Spring+Eclipse源码

    《JavaWeb整合开发完全自学...《JavaWeb整合开发完全自学手册》的重点第二篇Struts、第三篇Hibernate、第四篇Spring采用了相似的行文结构,条理清楚,不仅可作为stepbystep的入门书籍,也可作为读者自学的案头参考书。

    Spring Boot实战入门篇视频课程

    通过大量的实战编码进行讲解,课程以...第二章:springboot核心功能第三章:热部署的几种模式第四章:Web开发的各种技术第五章:数据访问层:spring data jpa、jdbctemplate、mybatis、redis第六章:异常相关的处理

    springboot项目整合.zip

    第四篇:整合Thymeleaf模板] 第五篇:使用JdbcTemplate访问数据库] 第六篇:整合SpringDataJpa] 第七篇:整合Mybatis] 第八篇:通用Mapper与分页插件的集成] 第九篇:整合Lettuce Redis] 第十篇:使用...

    java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集.zip

    第四题 ArrayList LinkedList Vector的区别.pdf docker讲得最清楚.doc Dubbo是什么?能做什么?.doc java 基于TCP协议的Socket编程和通信.doc Java面试高级篇—说说TCP,UDP和socket,Http之间联系和区别.doc MySQL...

    Lhy_Machine_Learning:李宏毅2021Spring机器学习课程课件及作业

    Learning李宏毅2021Spring机器学习课程课件及作业B站视频地址: : 课程主页: : 不定期分享读研干货,点赞关注一起进步: ://space.bilibili.com/46880349人工智能技术探讨群:78174903 第一节简介作业HW1:回归第二...

    JAVA WEB从入门到精通 随书源码 J2EE

    第二篇、第三篇和第四篇分别采用了相似的行文结构,条理清楚地讲解了Struts、Hibernate和Spring三种框架所包含的组件。第五篇则通过Struts+Spring+Hibernate解决方案实现一个完整的应用实例。 全书配合大量的图例及...

    java web技术开发大全(最全最新)

    第4篇 Spring篇 第22章 Spring的Helloworld程序 第23章 反向控制(Ioc)与装配JavaBean 第24章 Spring中的数据库技术 第25章 Spring的其他高级技术 第5篇 综合实例篇 第26章 Struts 2与Hibernate、Spring的整合 ...

    Spring基于xml文件配置Bean过程详解

    主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java.Web整合开发王者归来.part04.rar

    第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...

    Java.Web整合开发王者归来.part02.rar

    第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...

    Java.Web整合开发王者归来.part05.rar

    第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...

    Java.Web整合开发王者归来.part03.rar

    第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...

    Java.Web整合开发王者归来.part12.rar

    第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为...

Global site tag (gtag.js) - Google Analytics