代码获取

十四. ssh 整合1 - 包

1. Struts jar 包
    - Struts-2.xx\apps\stutrs2-blank\WEB-INF\lib
2. Hibernate jar 包
    - hibernate-release-5.0.7.Final\lib\required
    - mysql 驱动包
    - 日志记录
3. Spring jar 包

十五. ssh 整合 - 配置文件

1. Struts 配置文件
    - web.xml
    - struts.xml

2. Hibernate 配置文件
    - hibernate.cfg.xml
    - 映射文件

3. Spring 配置文件
    - web.xml
    - applicationContext.xml
    - 日志记录

十六. ssh 整合2 - Spring 和 Struts2 的整合方式一: Action 由 Struts2 创建

1. 导入 struts2-spring-plugin-2.3.33.jar 整合包

2. applicationContext.xml 文件中配置 Service (applicationContext.xml)

<!--  配置 Serveice  -->
<bean id="customerService" class="com.q.ssh.service.impl.CustomerServiceImpl"></bean>

3.  配置Action (struts.xml)

<!--  配置Action  -->
<package name="ssh1" namespace="/" extends="struts-default">
<action name="customer_*" class="com.q.ssh.web.action.CustomerAction" method="{1}" />
</package>

4. CustomerAction.java 文件中

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.q.ssh.domain.Customer;
import com.q.ssh.service.CustomerService; public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
// 模型驱动使用对象
private Customer customer; @Override
public Customer getModel() {
return customer;
} // 注入 CustomerService
private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
} // 保存客户 :save
public String save(){
System.out.println("save>>>");
customerService.save(customer); // 这里就可以直接调用 save 方法。
return NONE;
} }

十七. ssh 整合2 - Spring 和 Struts2 的整合方式二: Action 由 Spring 创建

注意:
    - 需要配置 Action 为多例。
    - 需要手动注入 Service。

1. 导入 struts2-spring-plugin-2.3.33.jar 整合包

2. 将 Action 交给 Spring (applicationContext.xml)

<!--  配置 Serveice (注:需要将 Action 设置为多例: scope="prototype" ) -->
<bean id="customerService" class="com.q.ssh.service.impl.CustomerServiceImpl" scope="prototype"></bean> <!-- 配置 Action (将 Action 交给 Spring 管理)-->
<bean id="customerAction" class="com.q.ssh.web.action.CustomerAction">
<!-- 需要手动注入 Service -->
<property name="customerService" ref="customerService" />
</bean>

3. 配置 Action (Struts.xml)

    <!--  配置Action  -->
<package name="ssh1" namespace="/" extends="struts-default">
<!-- 这里的 class属性要和 上面的 id 相同 -->
<action name="customer_*" class="customerAction" method="{1}" />
</package>

十八. ssh 整合3 - Service 调用 DAO

1. 将DAO交给 Spring 管理

<!--  配置DAO  -->
<bean id="customerDao" class="com.q.ssh.dao.impl.CustomerDaoImpl"> </bean>

2. 业务层注入DAO (CustomerServiceImpl.java)

import com.q.ssh.dao.CustomerDao;
import com.q.ssh.domain.Customer;
import com.q.ssh.service.CustomerService; public class CustomerServiceImpl implements CustomerService { // 注入 DAO
private CustomerDao customerDao;
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
} @Override
public void save(Customer customer) {
System.out.println("Service 中的 save...");
customerDao.save(customer);
}
}

3. 在Service配置中注入 (applicationContext.xml)

<!--  配置 Serveice  -->
<bean id="customerService" class="com.q.ssh.service.impl.CustomerServiceImpl" scope="prototype">
// 将customerDao注入 :
<property name="customerDao" ref="customerDao" />
</bean>

十九. ssh 整合3 - Spring 整合 Hibernate 框架

1. 创建数据库

2. 在 Spring 的配置文件中,引入 Hibernate 的配置信息

<!--  Spring整合Hibernate  -->
<!-- 引入 Hibernate 的配置信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 引入Hibernate的配置文件 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>

3. 修改 CustomerDaoImpl.java 的类 继承 HibernateDaoSupport

import com.q.ssh.dao.CustomerDao;
import com.q.ssh.domain.Customer;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao { @Override
public void save(Customer customer) {
System.out.println("DAO 中的 save...");
}
}

4. 配置DAO 中导入

<!--  配置DAO  -->
<bean id="customerDao" class="com.q.ssh.dao.impl.CustomerDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

5. 在DAO中 Hibernate 的模板完成保存操作

public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {

    @Override
public void save(Customer customer) {
System.out.println("DAO 中的 save...");
// 调用 Save 方法。
this.getHibernateTemplate().save(customer);
}
}

6. 配置 Spring 的事务管理

<!-- 配置事务管理器  -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

7. 开启注解事务

<!-- 开启注解事务  -->
<tx:annotation-driven transaction-manager="transactionManager" />

8. 在业务层使用注解

@Transactional
public class CustomerServiceImpl implements CustomerService { // 注入 DAO
private CustomerDao customerDao;
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
} @Override
public void save(Customer customer) {
System.out.println("Service 中的 save...");
customerDao.save(customer);
}
}

二十. ssh 整合3 - Spring 整合 Hibernate 框架 (不带 Hibernate 配置文件)

1. 将 Hibernate 文件 使用Spring 整合到 applicationContext 文件中

<!--    引入外部属性文件    -->
<content:property-placeholder location="classpath:jdbc.properties" /> <!-- 配置C3P0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean> <!-- Spring整合Hibernate -->
<!-- 引入 Hibernate 的配置信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 引入Hibernate的配置文件 -->
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource" /> <!-- 配置Hibernate相关属性 -->
<property name="hibernateProperties">
<props>
<!-- 方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!-- 显示sql -->
<prop key="hibernate.show_sql">true</prop>
<!-- 是否格式化sql语句 -->
<prop key="hibernate.format_sql">true</prop>
<!-- update:如果数据库有没表,自动帮你创表 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property> <!-- 设置映射文件 -->
<property name="mappingResources">
<list>
<value>com/q/ssh/domain/Customer.hbm.xml</value>
</list>
</property>
</bean>

二十一. ssh 整合3 - Hibernate 模板使用

# 增删改查操作

public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {

    // 增
@Override
public void save(Customer customer) {
System.out.println("DAO 中的 save...");
// 将数据保存到数据库
System.out.println(customer);
this.getHibernateTemplate().save(customer);
} // 改
@Override
public void update(Customer customer) {
this.getHibernateTemplate().update(customer);
} // 删
@Override
public void delete(Customer customer) {
this.getHibernateTemplate().delete(customer);
} // 查 (一个)
@Override
public Customer findById(Integer id) {
return this.getHibernateTemplate().get(Customer.class, id);
} //查 (多个)
@Override
public List<Customer> findAllByHQL() {
// List<Customer> list = (List<Customer>) this.getHibernateTemplate().find("from");
// return list;
return null;
} //查 (多个)
@Override
public List<Customer> findAllByQBC() {
DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);
List<Customer> list = (List<Customer>) this.getHibernateTemplate().findByCriteria(criteria);
return list;
}
}

二十二. ssh 整合 - 延迟加载问题解决

# 由于 session 的开启和关闭都在 Service 层,一旦 Action 层调用已经关闭的 session 就会报错,
# 解决:将 session 的开启和关闭放在 Action 层。

<!-- web.xml  解决延迟加载的过滤器  -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter> <filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

二十三. ssh 整合 - web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!-- Spring 核心监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 加载 Spring 文件路径 - 默认加载的是 WEB-INF/applicationContext.xml -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <!-- 解决延迟加载的过滤器 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter> <filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping> <!-- Struts 核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

Java - 框架之 SSH 整合的更多相关文章

  1. 三大框架 之 SSH整合

    目录 SSH整合 Spring整合web项目 在Servlet当中直接加载配置文件,获取对象 存在问题 解决方案 SSH整合 引入Jar包 引入配置文件 创建包结构 创建相关类 创建Customer业 ...

  2. (摘录笔记)JAVA学习笔记SSH整合搭建项目

    1:当然是导jar包啦: struts2: spring: hibernate: 至于这些jar包是什么作用,我想就不必我解释了,大家都懂得,ssh2基本的jar包: 还有一些其他jar包:strut ...

  3. JAVA框架 Spring junit整合单元测试

    一.准备工作 1:Junit的需要的jar包: 2.spring的整合的jar包:spring-test-4.2.4.RELEASE.jar 3.代码实现 1) //导入整合的类,帮我们加载对应的配置 ...

  4. 《轻量级Java Web整合开发入门SSH》 - 快速理解Java框架的又一积木

           学习JAVA不难,难的是没有多余的时间给你仔细学习.       伴随着项目的不断跟进,责任重于泰山,必须快速提升.       我不能期望把一本书或者一个项目完全吃透,只希望能用数量去 ...

  5. 三大框架SSH整合

    三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...

  6. Maven环境下搭建SSH框架之Spring整合Hibernate

    © 版权声明:本文为博主原创文章,转载请注明出处 1.搭建环境 Spring:4.3.8.RELEASE Hibernate:5.1.7.Final MySQL:5.7.17 注意:其他版本在某些特性 ...

  7. SSH整合框架+mysql简单的实现

    SSH整合框架+mysql简单的实现 1. 框架整合原理: struts2整合Spring 两种: 一种struts2自己创建Action,自动装配Service : 一种 将Action交给Spri ...

  8. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

  9. SSH框架的基本整合

    SSH框架的基本整合 AOP注解方式 编写切面类(包括通知和切入点) 开启自己主动代理 JDBC模板技术 Spring提供模板技术,数据库的操作 以后编写DAO层,都能够继承JdbcDaoSuppor ...

随机推荐

  1. LeetCode 946. 验证栈序列(Validate Stack Sequences) 26

    946. 验证栈序列 946. Validate Stack Sequences 题目描述 Given two sequences pushed and popped with distinct va ...

  2. new/delete与命名空间

    目录 1. new/delete 2. 命名空间 1. new/delete C++中的动态内存分配 C++通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 delete关键字 ...

  3. 数据分析——matplotlib的用法

    Matplotlib是一个强大的Python绘图和数据可视化的工具包.数据可视化也是我们数据分析的最重要的工作之一,可以帮助我们完成很多操作,例如:找出异常值.必要的一些数据转换等.完成数据分析的最终 ...

  4. java之初识hibernate

    1. 使用jdbc进行数据库操作:获取数据库连接,编写sql语句,执行sql操作,关闭连接. 比如:每次创建连接,释放资源----使的执行效率降低: 解决方案:连接池. 编写sql语句动作----简单 ...

  5. C#只读属性

    using System; using System.Collections.Generic; using System.Text; namespace 面向对象 { class Person { / ...

  6. AppRTC服务搭建(测试)

    提供一个在线的webrtc服务器测试,需要的朋友看看.https://www.webrtcserver.cn/ 服务器搭建环境各有不同在此参考前人经验差试一下. 运行AppRTC需要使用Google ...

  7. 如何使用NPM?CNPM又是什么?

    背景介绍 什么是npm? npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等), NPM是随同NodeJS一起安装的包管理工具 ...

  8. Vivado Non-Project Flow

    # ----------------------------------------------------------------------------- # Vivado Non-Project ...

  9. 微信小程序实现下拉刷新上拉加载

    代码片段:https://developers.weixin.qq.com/s/K9VbWZmy7e8C

  10. SAP Marketing Cloud功能简述(五) : 销售计划管理

    Grace前四篇介绍SAP Marketing Cloud的文章: SAP Marketing Cloud功能简述(一) : Contacts和Profiles SAP Marketing Cloud ...