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:\struts2\struts-2.3.24\apps\struts2-blank\WEB-INF\lib*.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.Final\lib\required*.jar
日志记录:
log4j 的包由 Spring 引入.
数据库驱动:
Hibernate 引入连接池:
D:\hibernate-release-5.0.7.Final\lib\optional\c3p0*.jar
【Spring】
基本的开发:
AOP 开发:
JDBC 开发:
事务管理的开发:
整合 Hibernate:
整合 web 项目:
1.2.2.2 引入相关的配置文件:
【Struts2】
web.xml

struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFil terstruts2/* struts.xml 【Hibernate】 核心配置:hibernate.cfg.xml 映射文件: 【Spring】 web.xml org.springframework.web.context.ContextLoaderListenerclass> contextConfigLocationclasspath: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.MySQLDialecttruetrueupdatecn/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 OpenSessionInViewFilterorg.springframework.orm.hibernate5.support.OpenSessionInViewFilter OpenSessionInViewFilter*.action

相关推荐