1. Spring 框架整合 Struts2 框架

// [第一种整合方式(不推荐)](http://www.cnblogs.com/linkworld/p/7718274.html)
// 从 ServletContext 中获取 Service 对象 ServletContext servletContext = ServletActionContext.getServletContext();
WebApplicationContext ac =
WebApplicationContextUtils.getWebApplicationContext(servletContext);
CustomerService cs = (CustomerService)ac.getBean("customerService"); // 调用业务层方法
cs.save(customer); // 第二种方式: Action 由 Struts2 框架创建
// 因为导入的 struts2-spring-plugin-2.3.24.jar 包自带一个配置文件 struts-plugin.xml,
// 该配置文件中有如下代码:
// <constant name="struts.objectFactory" value="spring"/> 开启一个常量,如果该常量开启,
// 那么下面的常量(位于default.properties 中)就可以使用
// struts.objectFactory.spring.autoWire = name, 该常量可以让 Action 类自动装配Bean对象! public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{ // 模型驱动,封装请求数据
private Customer customer = new Customer();
public Customer getModel(){
return customer;
} // Action 类自动装配 Bean 对象,需要提供 set 方法
private CustomerService customerService;
public void setCustomerService(CustomerService customerService){
this.customerService = customerService;
} // 保存客户
public String add(){
customerService.save(customer);
return NONE;
}
} // 第三种方式: Action 由 Spring 框架来创建(推荐)
// 把具体的 Action 类配置到 applicationContext.xml 文件中,注意: struts.xml 需要做修改
// applicationContext.xml
<bean id="customerAction" class="com.itheima.web.action.CustomerAction" scope="prototype">
<property name="customerService" ref="customerService"/>
</bean> // struts.xml 中的修改,把全路径修改成 ID 值
<action name="customer_*" class="customerAction" method="{1}"/> // 第三种方式需要注意两个地方
// Spring 框架默认生成 CustomerAction 是单例的, 而 Struts2 框架是多例的,所以需要配置 scope="prototype"
// CustomerService 现在必须自己手动注入 public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{ // 模型驱动,封装请求数据
private Customer customer = new Customer();
public Customer getModel(){
return customer;
} // 此处为依赖注入
private CustomerService customerService;
public void setCustomerService(CustomerService customerService){
this.customerService = customerService;
} // 保存客户
public String add(){
customerService.save(customer);
return NONE;
}
}

2. Spring 框架整合 Hibernate 框架

// 最初代码
public class CustomerDaoImpl implements CustomerDao{ public void save(Customer customer){ // 将数据保存到数据库
HibernateTemplate template = new HibernateTemplate();
template.save(customer);
}
} // 升级版
// 将 template 的创建交给 Spring 框架管理
// applicationContext.xml <bean id="customerDao" class="com.itheima.dao.CustomerDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<!-- hibernateTemplate 底层依赖的是 session, 所以需要传入sessionFactory创建session-->
<property name="sessionFactory"/>
</bean> public class CustomerDaoImpl implments CustomerDao{ private HibernateTemplate hibernateTemplate;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate){
this.hibernateTemplate = hibernateTemplate;
} // 保存客户
public void save(Customer customer){
hibernateTemplate.save(customer);
}
} // 第三次升级
// 直接继承 HibernateDaoSupport
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao{ // 保存客户
public void save(Customer customer){
this.getHibernateTemplate().save(customer);
} // 修改客户
public void update(Customer customer){
this.getHibernateTemplate().update(customer);
}
// 删除客户
public void delete(Customer customer){
this.getHibernateTemplate().delete(customer);
}
// 通过主键查询客户
// findById(Class<T> clazz, id)
public void findById(Long cust_id){
this.getHibernateTemplate().get(Customer.class, cust_id);
}
// 查询所有
// find(String queryString, Object...values)
public List<T> findAll(){
this.getHibernateTemplate().find("from Customer");
}
// 分页查询
public PageBean<Customer> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria){
// 创建分页对象
PageBean<T> page = new PageBean<T>();
// 设置属性
page.setPageCode(pageCode);
page.setPageSize(pageSize); // 设置聚合函数, SQL 已经变成了 select count(*) from
criteria.setProjection(Projections.rowCount());
List<Number> list = (List<Number>)this.getHibernateTemplate().findByCriteria(criteria);
if(list != null && list.size() > 0){
int totalCount = list.get(0).intValue();
page.setTotalCount(totalCount);
} // 清除SQL, select * from
criteria.setProjection(null); List<Customer> beanList =
(List<Customer>)this.getHibernateTemplate().findByCriteria(
criteria, (pageCode - 1)*pageSize, pageSize);
page.setBeanList(beanList); return page;
}
} // applicationContext.xml
<bean id="customerDao" class="com.itheima.dao.CustomerDaoImpl">
<!-- hibernateDaoSupport 类中会判断,如果 hibernateTemplate 不存在,会创建 -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean> // 第一种整合方式: 带有 hibernate.cfh.xml 的配置文件 // hibernate.cfg.xml
<!-- 映射配置 -->
<mapping resource="com/itheima/domain/Customer.hbm.xml"/> // applicationContext.xml
<!-- 编写 bean, 名称都是固定的,加载 hibernate.cfg.xml 的配置文件
并创建 sessionFactory 对象 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean> <!-- 配置平台事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- session 可以管理事务, sessionFactory 是生产 session 的地方 -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean> <!-- 开启事务的注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- 持久层需要使用 sessionFactory 对象 -->
<bean id="customerDao" class="com.itheima.dao.CustomerDaoImpl">
<!-- hibernateDaoSupport 类中会判断,如果 hibernateTemplate 不存在,会创建 -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean> // CustomerServiceImpl.java
// 在业务层添加事务的注解
@Transactional
public class CustomerServiceImpl implements CustomerService{
private CustomerDao customerDao;
public void setCustomerDao(CustomerDao customerDao){
this.customerDao = customerDao;
} // 保存客户
public void save(Customer customer){
customerDao.save(customer);
}
} // CustomerDaoImpl.java
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao{ // 保存客户
public void save(Customer customer){
this.getHibernateTemplate().save(customer);
}
} // 第二种整合方式: 不带有 hibernate.cfg.xml 的配置文件
// 1. hibernate 配置文件中
// * 数据库连接基本参数(四大参数)
// * Hibernate 相关的属性
// * 连接池
// * 映射文件 // 在 applicationContext.xml 中进行配置上述信息
// 先配置连接池相关的信息
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb1"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean> // LocalSessionFactory 加载配置文件
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
// 加载连接池
<property name="dataSource" ref="dataSource"/>
// 加载数据库方言,加载可选项
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property> // 引入映射的配置文件
<property name="mappingResources">
<list>
<value>com/itheima/domain/Cusomter.hbm.xml</value>
</list>
</property>
</bean>

参考资料

Spring 框架整合Struts2 框架和 Hibernate 框架的更多相关文章

  1. Hibernate框架_搭建第一个Hibernate框架

    一.eclipse搭建 A.创建动态web项目 New-->Dynamic web project(web project) B.导入jar包 1.数据库驱动包 2.hibernate开发必须j ...

  2. Spring笔记⑥--整合struts2

    Spring如何在web应用里面用 需要额外加入的jar包 Spring-web-4.0.0 Spring-webmvc-4.0.0 Spring的配置文件,没什么不同   需要在web.xml下配置 ...

  3. Spring框架整合Struts2

    1,用Spring架构,及Struts2-spring-plugin插件 导入Spring的dist全部所需的jar包 Struts2的spring插件 struts2-spring-plugin.X ...

  4. 搭建SSH框架整合Struts2和Spring时,使用@Autowired注解无法自动注入

    © 版权声明:本文为博主原创文章,转载请注明出处 1.问题描述: 搭建SSH框架,在进行Struts2和Spring整合时,使用Spring的@Autowired自动注入失败,运行报错java.lan ...

  5. Spring框架整合Struts2框架的传统方法

    1. 导入CRM项目的UI页面,找到添加客户的页面,修改form表单,访问Action * 将menu.jsp中133行的新增客户的跳转地址改为:href="${pageContext.re ...

  6. Spring+Hibernate+Struts(SSH)框架整合

    SSH框架整合 前言:有人说,现在还是流行主流框架,SSM都出来很久了,更不要说SSH.我不以为然.现在许多公司所用的老项目还是ssh,如果改成流行框架,需要成本.比如金融IT这一块,数据库dao层还 ...

  7. (转)hibernate-5.0.7+struts-2.3.24+spring-4.2.4三大框架整合

    http://blog.csdn.net/yerenyuan_pku/article/details/70040220 SSH框架整合思想 三大框架应用在JavaEE三层结构,每一层都用到了不同的框架 ...

  8. SSH三大框架整合案例

    SSH三大框架的整合   SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 ...

  9. SSH框架整合思想

    --------------------siwuxie095                                 SSH 框架整合思想         1.SSH 框架,即 Struts2 ...

随机推荐

  1. 浅谈iOS 5的StoryBoard

    转自:http://blog.163.com/wangy_0223/blog/static/450146612012318113233218/ 示例代码的Github地址:https://github ...

  2. Mysql bin-log日志文件处理

    当MySQL开启bin-log选项后,会不停的记录bin-log,但是几天前的日志肯定就没用了或者可以备份到别处,那么如何正确的处理这些日志呢 参考一下几篇文章 MySQL mysql-bin log ...

  3. javascript深入理解js闭包【手动加精】

    http://www.jb51.net/article/24101.htm 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.   一.变量的作用 ...

  4. 机器学习算法( 七、AdaBoost元算法)

    一.概述 当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见.机器学习处理问题时又何尝不是如此?这就是元算法(meta-algorithm)背后的思路.元算法是对其他算法进行组合的一种方 ...

  5. Model Binding is not working. MVC3 视图模型绑定不成功

    问题出现在POST方法中,当我要将数据提交到后台的时候,绑定的变量值为null 原因是视图中的名称跟Controller中的视图的名称不一致造成的. 假如你视图中的Model采用的是Html.Labe ...

  6. 网站真分页js代码该怎么写?

    真分页这个词对程序猿们来说,并不是一个陌生的词汇,但是如果你是初次学习真分页,或许还是得花点时间小小研究下,下面是之前去转盘网(喜欢的可以看看,也可以进入引擎模式)的真分页js部分代码,html部分的 ...

  7. BZOJ2820 YY的GCD 莫比乌斯+系数前缀和

    /** 题目:BZOJ2820 YY的GCD 链接:http://www.cogs.pro/cogs/problem/problem.php?pid=2165 题意:神犇YY虐完数论后给傻×kAc出了 ...

  8. 2016-2017 ACM-ICPC CHINA-Final H Great Cells ans[i]*i看做整体,转化为期望理解来解题

    /** 题目:2016-2017 ACM-ICPC CHINA-Final H Great Cells 链接:http://codeforces.com/gym/101194 题意:给定n*m的矩形, ...

  9. telnet master主机的NodePort服务不通的问题

    硬件环境: 两台物理机: 172.16.114.210(master主机) 172.16.114.211(node主机) 软件环境: kubernetes 1.5.2 flannel 0.5.5 问题 ...

  10. sqlserver更新表脚本

    --增加项目字段,门店信息,所在省份,所在市,所在区县,提供服务ALTER TABLE [dbo].[school_base_info]ADD [store_information] varchar( ...