spring 技术详解 教程
Posted globalcoding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 技术详解 教程相关的知识,希望对你有一定的参考价值。
案例一使用 SSH 的整合完成客户的保存操作
1.1案例需求
1.1.1 需求描述
使用 SSH 整合完成 CRM 的客户保存操作
1.2相关知识点:
1.2.1 SSH 简单的回顾:
1.2.1.1 SSH 的基本开发回顾
1.2.2 SSH 框架的整合方式一:零障碍整合(带有 Hibernate 配置文件)
1.2.2.1 创建 web 项目,引入相关 jar 包.
【Struts2】
D:struts2struts-2.3.24appsstruts2-blankWEB-INFlib*.jar
Struts2 需要了解的 jar 包:
struts2-convention-plugin-2.3.24.jar
---Struts2 注解的开发包.
struts2-json-plugin-2.3.24.jar
---Struts2 整合 AJAX 返回 JSON 数据.
struts2-spring-plugin-2.3.24.jar
---Struts2 整合 Spring 的插件包.
【Hibernate】
D:hibernate-release-5.0.7.Finallib
equired*.jar
日志记录:
log4j 的包由 Spring 引入.
数据库驱动:
Hibernate 引入连接池:
D:hibernate-release-5.0.7.Finalliboptionalc3p0*.jar
【Spring】
基本的开发:
AOP 开发:
JDBC 开发:
事务管理的开发:
整合 Hibernate:
整合 web 项目:
1.2.2.2 引入相关的配置文件:
【Struts2】
web.xml
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFil
ter
struts2
/*
struts.xml
【Hibernate】
核心配置:hibernate.cfg.xml
映射文件:
【Spring】
web.xml
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
applicationContext.xml
log4j.propertiess
1.2.2.3 引入相关的页面并进行修改:
1.2.2.4 创建包结构和相关的类:
1.2.2.5 Struts2 和 Spring 的整合:方式一:Action 类由 Struts2 自己创建
【编写 Action 中的 save 方法】
/**
* 保存客户的执行的方法:save
*/
public String save(){
System.out.println("Action 中的 save 方法执行了...");
return NONE;
}
【配置 Action 类】
【在 Action 中调用业务层的类】
配置 Service:
在 Action 中调用
// 传统方式的写法
WebApplicationContext webApplicationContext = WebApplicationContextUtils
.getWebApplicationContext(ServletActionContext.getServletContext());
CustomerService
customerService
= (CustomerService)
webApplicationContext.getBean("customerService");
***** 这种写法很麻烦的,因为需要在每个 Action 中的每个方法上获取工厂,通过工厂获得类.
为了简化这个代码引入一个插件的包:
struts2-spring-plugin-2.3.24.jar
在这个插件中开启一个 Struts2 常量
*
* 默认的情况下 struts2 将这个常量关闭的,现在引入插件以后,将常量开启了,引发下面的一些
常量生效.
struts.objectFactory.spring.autoWire = name
那么就可以在 Action 中提供想注入的属性了:
public class CustomerAction extends ActionSupport implements ModelDriven
{
// 模型驱动使用的对象
private Customer customer = new Customer();
@Override
public Customer getModel() {
return customer;
}
// 注入业务层的类:
private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
}
/**
* 保存客户的执行的方法:save
*/
public String save() {
System.out.println("Action 中的 save 方法执行了...");
// 传统方式的写法
/*WebApplicationContext webApplicationContext = WebApplicationContextUtils
.getWebApplicationContext(ServletActionContext.getServletContext());
CustomerService customerService = (CustomerService)
webApplicationContext.getBean("customerService");*/
// 自动注入
customerService.save(customer);
return NONE;
}
}
【在 Service 中编写 save 方法】
public class CustomerServiceImpl implements CustomerService {
@Override
public void save(Customer customer) {
System.out.println("Service 中的 save 方法执行了...");
}
}
1.2.2.6 Struts2 和 Spring 的整合方式二:Action 类由 Spring 创建.(推荐)
【引入插件包】
struts2-spring-plugin-2.3.24.jar
【Action 交给 Spring 管理】
将 Action 配置到 Spring 中.
Action 的配置:
1.2.2.7 在业务层调用 DAO
【将 DAO 配置到 Spring 中】
【在业务层注入 Dao】
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);
}
}
1.2.2.8 Spring 整合 Hibernate:
【创建映射文件】
【加载到核心配置文件】
【在 Spring 的配置文件中完成如下配置】
【改写 DAO】
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
@Override
public void save(Customer customer) {
System.out.println("DAO 中的 save 方法执行了...");
}
}
【调用模板中的方法】
@Override
public void save(Customer customer) {
System.out.println("DAO 中的 save 方法执行了...");
// 保存:
this.getHibernateTemplate().save(customer);
}
1.2.2.9 配置 Spring 的事务管理:
【配置事务管理器】
【注解事务管理的开启】
【在业务层添加一个注解】
1.2.3 SSH 框架的整合方式二:不带 Hibernate 的配置文件
1.2.3.1 复制一个 SSH1 的项目.
1.2.3.2 查看 Hibernate 的配置文件:
Hibernate 的配置文件包含如下内容:
连接数据库必要的参数:
Hibernate 的属性:
连接池的配置:
映射文件的引入:
1.2.3.3 替换数据库连接参数和连接池的配置:
创建 jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///ssh1
jdbc.username=root
jdbc.password=123
在 Spring 中引入外部属性文件
配置连接池:
1.2.3.4 配置 Hibernate 的其他属性及映射:
org.hibernate.dialect.MySQLDialect
true
true
update
cn/itcast/ssh/domain/Customer.hbm.xml
1.2.4 HibernateTemplate 的使用:
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
@Override
public void save(Customer customer) {
System.out.println("DAO 中的 save 方法执行了...");
// 保存:
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(Long id) {
return this.getHibernateTemplate().load(Customer.class, id);
}
@Override
public List findAllByHQL() {
List
list
=
(List)
this.getHibernateTemplate().find("from Customer");
return list;
}
public List findAllByQBC(){
DetachedCriteria
detachedCriteria
=
DetachedCriteria.forClass(Customer.class);
List
list
=
(List)
this.getHibernateTemplate().findByCriteria(detachedCriteria);
return list;
}
}
1.2.5 延迟加载的问题的解决:OpenSessionInViewFilter
OpenSessionInViewFilter
org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
OpenSessionInViewFilter
*.action
以上是关于spring 技术详解 教程的主要内容,如果未能解决你的问题,请参考以下文章
spring 技术详解 教程
spring 技术详解 教程
经典Spring入门基础教程详解
Spring Boot 2.0 教程 - 配置详解
Spring框架学习教程,详解Spring注入bean的几种方式
spring security相关认证类详解