代码获取

十四. 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. 3.JVM 垃圾收集器

    Garbage Collect(垃圾回收) 1.1 如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾. 1.1.1 引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用, ...

  2. python学习-63 组合

    组合 1.什么是组合? 定义一个类,由数据属性构成,这几个属性又可以是通过一个类实例化的对象,这就是组合. 举例: class School: def __init__(self,name,addre ...

  3. 关于WPF中的XAML

    XAML全称extensible application markup language(可扩展性标记语言) 可扩展应用程序标记语言(XAML)是一种声明性语言.概括来说,就是为应用程序构建UI.目前 ...

  4. java之hibernate之双向的多对一关联映射

    这篇讲解 双向的多对一关联映射 1.表结构和多对一时,一致 2.类结构 Book.java public class Book implements Serializable{ private int ...

  5. MySQL-5.7.26解压版安装教程

    1.下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.26-winx64.zip 2.在解压目录中添加 data文件夹 和 my.in ...

  6. jquery easyui datagrid 在翻页以后仍能记录被选中的行及刷新设置选中行数据

    //easyUI的datagrid在复选框多选时,如何在翻页以后仍能记录被选中的行://注意datagrid中需要配置idField属性,一般为数据的主键 $.ajax({ type: 'GET', ...

  7. Sql Server 使用游标辅助循环

    项目临时表#TMPxmdt 存有ID,起始年度,完成年度(int型)两个字段: 实现功能:将#TMPxmdt表中每个ID对应的起始年度至完成年度中所有年度以(ID, ND)的形式插入另一个临时表#TM ...

  8. .net core 定时程序

    using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft. ...

  9. 学了python能干什么

    学了python能做些什么 1.WEB开发 Python拥有很多免费数据函数库.免费web网页模板系统.以及与web服务器进行交互的库,可以实现web开发,搭建web框架,目前比较有名气的Python ...

  10. 易百教程人工智能python修正-人工智能监督学习(分类)

    分类技术或模型试图从观测值中得出一些结论. 在分类问题中,我们有分类输出,如“黑色”或“白色”或“教学”和“非教学”. 在构建分类模型时,需要有包含数据点和相应标签的训练数据集. 例如,如果想检查图像 ...