1. Spring 框架整合 Struts2 框架

  1. // [第一种整合方式(不推荐)](http://www.cnblogs.com/linkworld/p/7718274.html)
  2. // 从 ServletContext 中获取 Service 对象
  3. ServletContext servletContext = ServletActionContext.getServletContext();
  4. WebApplicationContext ac =
  5. WebApplicationContextUtils.getWebApplicationContext(servletContext);
  6. CustomerService cs = (CustomerService)ac.getBean("customerService");
  7. // 调用业务层方法
  8. cs.save(customer);
  9. // 第二种方式: Action 由 Struts2 框架创建
  10. // 因为导入的 struts2-spring-plugin-2.3.24.jar 包自带一个配置文件 struts-plugin.xml,
  11. // 该配置文件中有如下代码:
  12. // <constant name="struts.objectFactory" value="spring"/> 开启一个常量,如果该常量开启,
  13. // 那么下面的常量(位于default.properties 中)就可以使用
  14. // struts.objectFactory.spring.autoWire = name, 该常量可以让 Action 类自动装配Bean对象!
  15. public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{
  16. // 模型驱动,封装请求数据
  17. private Customer customer = new Customer();
  18. public Customer getModel(){
  19. return customer;
  20. }
  21. // Action 类自动装配 Bean 对象,需要提供 set 方法
  22. private CustomerService customerService;
  23. public void setCustomerService(CustomerService customerService){
  24. this.customerService = customerService;
  25. }
  26. // 保存客户
  27. public String add(){
  28. customerService.save(customer);
  29. return NONE;
  30. }
  31. }
  32. // 第三种方式: Action 由 Spring 框架来创建(推荐)
  33. // 把具体的 Action 类配置到 applicationContext.xml 文件中,注意: struts.xml 需要做修改
  34. // applicationContext.xml
  35. <bean id="customerAction" class="com.itheima.web.action.CustomerAction" scope="prototype">
  36. <property name="customerService" ref="customerService"/>
  37. </bean>
  38. // struts.xml 中的修改,把全路径修改成 ID 值
  39. <action name="customer_*" class="customerAction" method="{1}"/>
  40. // 第三种方式需要注意两个地方
  41. // Spring 框架默认生成 CustomerAction 是单例的, 而 Struts2 框架是多例的,所以需要配置 scope="prototype"
  42. // CustomerService 现在必须自己手动注入
  43. public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{
  44. // 模型驱动,封装请求数据
  45. private Customer customer = new Customer();
  46. public Customer getModel(){
  47. return customer;
  48. }
  49. // 此处为依赖注入
  50. private CustomerService customerService;
  51. public void setCustomerService(CustomerService customerService){
  52. this.customerService = customerService;
  53. }
  54. // 保存客户
  55. public String add(){
  56. customerService.save(customer);
  57. return NONE;
  58. }
  59. }

2. Spring 框架整合 Hibernate 框架

  1. // 最初代码
  2. public class CustomerDaoImpl implements CustomerDao{
  3. public void save(Customer customer){
  4. // 将数据保存到数据库
  5. HibernateTemplate template = new HibernateTemplate();
  6. template.save(customer);
  7. }
  8. }
  9. // 升级版
  10. // 将 template 的创建交给 Spring 框架管理
  11. // applicationContext.xml
  12. <bean id="customerDao" class="com.itheima.dao.CustomerDaoImpl">
  13. <property name="hibernateTemplate" ref="hibernateTemplate"/>
  14. </bean>
  15. <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
  16. <!-- hibernateTemplate 底层依赖的是 session, 所以需要传入sessionFactory创建session-->
  17. <property name="sessionFactory"/>
  18. </bean>
  19. public class CustomerDaoImpl implments CustomerDao{
  20. private HibernateTemplate hibernateTemplate;
  21. public void setHibernateTemplate(HibernateTemplate hibernateTemplate){
  22. this.hibernateTemplate = hibernateTemplate;
  23. }
  24. // 保存客户
  25. public void save(Customer customer){
  26. hibernateTemplate.save(customer);
  27. }
  28. }
  29. // 第三次升级
  30. // 直接继承 HibernateDaoSupport
  31. public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao{
  32. // 保存客户
  33. public void save(Customer customer){
  34. this.getHibernateTemplate().save(customer);
  35. }
  36. // 修改客户
  37. public void update(Customer customer){
  38. this.getHibernateTemplate().update(customer);
  39. }
  40. // 删除客户
  41. public void delete(Customer customer){
  42. this.getHibernateTemplate().delete(customer);
  43. }
  44. // 通过主键查询客户
  45. // findById(Class<T> clazz, id)
  46. public void findById(Long cust_id){
  47. this.getHibernateTemplate().get(Customer.class, cust_id);
  48. }
  49. // 查询所有
  50. // find(String queryString, Object...values)
  51. public List<T> findAll(){
  52. this.getHibernateTemplate().find("from Customer");
  53. }
  54. // 分页查询
  55. public PageBean<Customer> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria){
  56. // 创建分页对象
  57. PageBean<T> page = new PageBean<T>();
  58. // 设置属性
  59. page.setPageCode(pageCode);
  60. page.setPageSize(pageSize);
  61. // 设置聚合函数, SQL 已经变成了 select count(*) from
  62. criteria.setProjection(Projections.rowCount());
  63. List<Number> list = (List<Number>)this.getHibernateTemplate().findByCriteria(criteria);
  64. if(list != null && list.size() > 0){
  65. int totalCount = list.get(0).intValue();
  66. page.setTotalCount(totalCount);
  67. }
  68. // 清除SQL, select * from
  69. criteria.setProjection(null);
  70. List<Customer> beanList =
  71. (List<Customer>)this.getHibernateTemplate().findByCriteria(
  72. criteria, (pageCode - 1)*pageSize, pageSize);
  73. page.setBeanList(beanList);
  74. return page;
  75. }
  76. }
  77. // applicationContext.xml
  78. <bean id="customerDao" class="com.itheima.dao.CustomerDaoImpl">
  79. <!-- hibernateDaoSupport 类中会判断,如果 hibernateTemplate 不存在,会创建 -->
  80. <property name="sessionFactory" ref="sessionFactory"/>
  81. </bean>
  82. // 第一种整合方式: 带有 hibernate.cfh.xml 的配置文件
  83. // hibernate.cfg.xml
  84. <!-- 映射配置 -->
  85. <mapping resource="com/itheima/domain/Customer.hbm.xml"/>
  86. // applicationContext.xml
  87. <!-- 编写 bean, 名称都是固定的,加载 hibernate.cfg.xml 的配置文件
  88. 并创建 sessionFactory 对象 -->
  89. <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
  90. <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
  91. </bean>
  92. <!-- 配置平台事务管理器 -->
  93. <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  94. <!-- session 可以管理事务, sessionFactory 是生产 session 的地方 -->
  95. <property name="sessionFactory" ref="sessionFactory"/>
  96. </bean>
  97. <!-- 开启事务的注解 -->
  98. <tx:annotation-driven transaction-manager="transactionManager"/>
  99. <!-- 持久层需要使用 sessionFactory 对象 -->
  100. <bean id="customerDao" class="com.itheima.dao.CustomerDaoImpl">
  101. <!-- hibernateDaoSupport 类中会判断,如果 hibernateTemplate 不存在,会创建 -->
  102. <property name="sessionFactory" ref="sessionFactory"/>
  103. </bean>
  104. // CustomerServiceImpl.java
  105. // 在业务层添加事务的注解
  106. @Transactional
  107. public class CustomerServiceImpl implements CustomerService{
  108. private CustomerDao customerDao;
  109. public void setCustomerDao(CustomerDao customerDao){
  110. this.customerDao = customerDao;
  111. }
  112. // 保存客户
  113. public void save(Customer customer){
  114. customerDao.save(customer);
  115. }
  116. }
  117. // CustomerDaoImpl.java
  118. public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao{
  119. // 保存客户
  120. public void save(Customer customer){
  121. this.getHibernateTemplate().save(customer);
  122. }
  123. }
  124. // 第二种整合方式: 不带有 hibernate.cfg.xml 的配置文件
  125. // 1. hibernate 配置文件中
  126. // * 数据库连接基本参数(四大参数)
  127. // * Hibernate 相关的属性
  128. // * 连接池
  129. // * 映射文件
  130. // 在 applicationContext.xml 中进行配置上述信息
  131. // 先配置连接池相关的信息
  132. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  133. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  134. <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb1"/>
  135. <property name="user" value="root"/>
  136. <property name="password" value="root"/>
  137. </bean>
  138. // LocalSessionFactory 加载配置文件
  139. <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  140. // 加载连接池
  141. <property name="dataSource" ref="dataSource"/>
  142. // 加载数据库方言,加载可选项
  143. <property name="hibernateProperties">
  144. <props>
  145. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  146. <prop key="hibernate.show_sql">true</prop>
  147. <prop key="hibernate.format_sql">true</prop>
  148. <prop key="hibernate.hbm2ddl.auto">update</prop>
  149. </props>
  150. </property>
  151. // 引入映射的配置文件
  152. <property name="mappingResources">
  153. <list>
  154. <value>com/itheima/domain/Cusomter.hbm.xml</value>
  155. </list>
  156. </property>
  157. </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. 【转载】 使用rman进行坏块修复(ORA-01578、ORA-01110)

    [转自]http://blog.itpub.net/21256317/viewspace-1062055/ 使用rman进行坏块修复(ORA-01578.ORA-01110) 2012年的一天,处理的 ...

  2. [docker]搭建私有registry

    导入导出镜像比较麻烦,共享镜像占了工作中一大部分时间. 搭建了个本地registry, 不支持用户名密码验证的 和 支持用户名密码验证的两种. 参考: https://docs.docker.com/ ...

  3. google_gflags使用

    gflags是google开源的一个解析命令行参数的工具. 最简单的demo #include <iostream> #include <gflags/gflags.h> us ...

  4. ext异常,ExceptionReturn

    package cn.edu.hbcf.common.vo; import java.io.PrintWriter; import java.io.StringWriter; /** * Ext 异常 ...

  5. VirtualBox错误ID: PAEmode解决

    今天在导入virtualbox的虚拟机ubuntu系统时,报错,无法打开虚拟机 报错内容如下: 错误 ID: PAEmode 严重: 致命错误 The guest is trying to switc ...

  6. ubox及日志管理

    ubox是openwrt的帮助工具箱,位于代码package/system/ubox下, CMakeLists.txt kmodloader.c log/ lsbloader.c validate/ ...

  7. windows下SVN服务的安装与配置

    第一步 下载 去svn官网下载一个最新版的svn svn官网下载地址 该链接会跳转到 https://sourceforge.net/projects/win32svn/ 进行下载 第二步 安装 双击 ...

  8. CI框架中 日志输出方法log_message()只允许输出字符串解决方案

    1.修改CodeIgniter/index.php,添加如下: define('ROOTDIR',dirname(__FILE__).'/'); 2.修改CodeIgniter/application ...

  9. 微信 Mustache

    最近微信小程序非常火,对于前端开发的程序员是个利好的消息,这里主要记录下微信小程序  Mustache语法. 小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究 ...

  10. RelativeSource.TemplatedParent 属性wpf

    今天看到这一句代码时候,自己只是知道绑定了,可是不知道绑定了什么啊 就去查了一下,后来说的好像是绑定的TemplateParent返回的 一个值.可是这是为什么呢, 有的说是绑定的是一个资源. 下面有 ...