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. 简化SSH框架的整合

    一.开发环境: (1)    OS:Windows 7 (2)    DB:MySql 5.1.6 (3)    JDK:1.8.0_17 (4)    Server:Apache Tomcat 8. ...

  2. C++ 中数串互转、进制转换的类

    /******************************************************************** created: 2014/03/16 22:56 file ...

  3. JS 语言的Function 解析

    1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: function func(){} 或 var func=function(){};  2.作为一个类构造器使用: 复制代码代码如下: ...

  4. JAVA 继承 extends

    /* 继承 1.提高了代码的复用性,简化了代码 2.让类与类之间产生了继承关系,才有了后面的多态的特性的存在 注意:千万不要为了获取其它类的功能简化代码,而建立继承关系, 必须要类与类之间存在继承关系 ...

  5. Ubuntu下安装Node.js

    下载Linux Binaries (.tar.gz)二进制包 解压 重命名为node 移动到/usr/local/目录下 创建软连接 ln -s /usr/local/node/bin/node   ...

  6. [转]makefile文件的编写规则及实例

    http://xueqi.iteye.com/blog/1567866   1.一个简单的makefile例子   假设一个程序有两个文件file1.c,file2.c,每个文件都包含head.h,生 ...

  7. Flocker 做为后端存储代理 docker volume-driver 支持

    docker Flocker https://github.com/ClusterHQ/flocker/ 文档: https://docs.clusterhq.com/en/latest/docker ...

  8. 几分钟看完 flow.ci 全部功能

    从 0 到 1,从邀请式内测到收费上线,flow.ci 经历了十个多月的沉淀与打磨.这期间,flow.ci 工程师们奋力赶工,进行了一系列的大功能更新,Bug 修复,功能优化. 这篇文章记录了 flo ...

  9. 干了这杯Java之集合概览

    Java集合框架支持两种类型容器: 一种是为了存储一个元素的合集,为Collection 一种是为了存储键/值对,为Mapping Collection包含 Set存储不重复的元素 List存储一个有 ...

  10. CentOS7下安装Gitlab社区版【安装步骤、IP改域名、修改端口】

    这两天一直在给公司的服务器配置Gitlab(10.5.4).过程很是痛苦,所以把过程记录一下. 1.安装CentOS7 从官网上下载了最新版CentOS-7-x86_64-DVD-1708.iso.用 ...