代码获取

十四. 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】两数之和【优化查询过程即可】

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  2. mysql 免费的图形管理工具

    在学习go语言开发时,使用了mysql 使用了两天mysql命令行,感觉实在是无法忍受, 找到了一个免费好用的 图形数据库管理工具SQLyog Professional 版本: 注册名:luoye25 ...

  3. Deep one-class classification

    Deep one-class classification 2019-03-17 23:09:59 zpainter 阅读数 1027  收藏 文章标签: 单分类问题异常检测 更多 分类专栏: 论文 ...

  4. ConsoleLoggerExtensions.AddConsole(ILoggerFactory)已过时代码修复

    0x00.问题 netcoreapp2.2环境下, Startup.cs 代码配置如下 public void Configure(IApplicationBuilder app, IHostingE ...

  5. linux ubuntu-16.04-配置java1.8和Tomcat8

    前言 第一次使用linux ubuntu16.04 服务器,所以做一下常用配置的记录. JDK 1.创建存放jdk的目录 一般在usr/local下创建一个java文件夹 cd /usr/local ...

  6. jQuery动画(带参数)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Oracle统计、分析和优化环境配置

    Oracle统计.分析和优化环境配置 创建批处理文件Login.bat 用于初始化设置系统环境 Login.bat @echo off title eoda mode con cols=140 col ...

  8. Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException

    转自:https://www.jb51.net/article/98644.htm Java xml出现错误 javax.xml.transform.TransformerException: jav ...

  9. 如何使用adb工具在电脑上使用程序的方式操控自己的android手机

    在电脑安装adb工具: sudo apt install android-tools-adb android-tools-fastboot# 检查是否成功adb version 开启adb服务 sud ...

  10. static关键字的作用(修饰类、方法、变量、静态块)

    1. static修饰的类只能为内部类,普通类无法用static关键字修饰.static修饰的内部类相当于一个普通的类,访问方式为(new 外部类名.内部类的方法() ).如下所示: public c ...