Java - 框架之 SSH 整合
十四. 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 整合的更多相关文章
- 三大框架 之 SSH整合
目录 SSH整合 Spring整合web项目 在Servlet当中直接加载配置文件,获取对象 存在问题 解决方案 SSH整合 引入Jar包 引入配置文件 创建包结构 创建相关类 创建Customer业 ...
- (摘录笔记)JAVA学习笔记SSH整合搭建项目
1:当然是导jar包啦: struts2: spring: hibernate: 至于这些jar包是什么作用,我想就不必我解释了,大家都懂得,ssh2基本的jar包: 还有一些其他jar包:strut ...
- JAVA框架 Spring junit整合单元测试
一.准备工作 1:Junit的需要的jar包: 2.spring的整合的jar包:spring-test-4.2.4.RELEASE.jar 3.代码实现 1) //导入整合的类,帮我们加载对应的配置 ...
- 《轻量级Java Web整合开发入门SSH》 - 快速理解Java框架的又一积木
学习JAVA不难,难的是没有多余的时间给你仔细学习. 伴随着项目的不断跟进,责任重于泰山,必须快速提升. 我不能期望把一本书或者一个项目完全吃透,只希望能用数量去 ...
- 三大框架SSH整合
三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...
- Maven环境下搭建SSH框架之Spring整合Hibernate
© 版权声明:本文为博主原创文章,转载请注明出处 1.搭建环境 Spring:4.3.8.RELEASE Hibernate:5.1.7.Final MySQL:5.7.17 注意:其他版本在某些特性 ...
- SSH整合框架+mysql简单的实现
SSH整合框架+mysql简单的实现 1. 框架整合原理: struts2整合Spring 两种: 一种struts2自己创建Action,自动装配Service : 一种 将Action交给Spri ...
- 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】
一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...
- SSH框架的基本整合
SSH框架的基本整合 AOP注解方式 编写切面类(包括通知和切入点) 开启自己主动代理 JDBC模板技术 Spring提供模板技术,数据库的操作 以后编写DAO层,都能够继承JdbcDaoSuppor ...
随机推荐
- Python-16-继承、封装、多态
一.继承 1. 概念 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类. 子类会“”遗传”父类的属性,从而解决代码重 ...
- day43——多表查询、Navicat工具的使用、pymysql模块
day43 多表查询 笛卡尔积--不经常用 将两表所有的数据一一对应,生成一张大表 select * from dep,emp; # 两个表拼一起 select * from dep,emp wher ...
- 易百教程人工智能python修正-人工智能数据准备-预处理数据
预处理数据 在我们的日常生活中,需要处理大量数据,但这些数据是原始数据. 为了提供数据作为机器学习算法的输入,需要将其转换为有意义的数据. 这就是数据预处理进入图像的地方. 换言之,可以说在将数据提供 ...
- 用Visual Studio 2015 编写 MASM 汇编程序(二)从头开发一个Win32汇编程序
一,建立一个VC的控制台类型的空工程: 1,从VS菜单中选择“文件”->“新建”->“项目”. 2,在新建项目中选择:“Visual c++”->"Win32"- ...
- day28-python之property
1.property用法 # class Goods: # def __init__(self): # # 原价 # self.original_price = 100 # # 折扣 # self.d ...
- 笔谈I帧、P帧、B帧、PTS、DTS(一)
做视频的播放,涉及到关键帧一说,从视频流中取出数据显示图像的时候,这些一幅幅图像之间到底有什么关联呢.那就有必要弄清楚I帧.P帧.B帧.PTS.DTS的概念,文章 I,P,B帧和PTS,DTS的关系 ...
- Android查看应用方法数
当一个项目快速迭代时,难免引进各种依赖,从而导致单个apk超过65k的限制.如何查询apk的方法数也是每个Android Developer必备技能. 我使用的是 dex-method-counts ...
- (在客户端)https抓包解密
(一)原理分析 https的数据包是用对称秘钥(https协议协商出来的随机数)加密后的密文. 对称秘钥在传输线路上是密文的(被非对称加密过),但是在client.server端是明文的(因为要用于加 ...
- iview表单数字验证
sort: [ {required: true, message: '请填写栏目排序', trigger: 'blur'}, {type: 'number', message: '请输入数字', tr ...
- 输入web网站点击之后发生的事情
(1)用户在浏览器(客户端)里输入或者点击一个连接: (2)浏览器向服务器发送HTTP请求: (3)服务器处理请求,如果查询字符串或者请求体里含有参数,服务器也会把这些参数信息考虑进去: (4)服务器 ...