ssh集成1

1. pom

1.1 hibernate相关(5.2.12.Final)

  hibernate-core
  hibernate-c3p0(数据库连接池)
  hibernate-ehcache
  mysql-connector-java(5.1.44)

1.2 spring相关(5.0.1.RELEASE)

  spring-context
  spring-orm
  spring-web
  spring-aspects

注:创建spring的XML文件时,需要添加beans/aop/tx/context标签支持

各依赖说明:
spring-context
创建spring上下文

  spring-orm
    org.springframework.orm.hibernate5.LocalSessionFactoryBean
      dataSource:指定数据源
      hibernateProperties:指定hibernate相关属性,如:dialect/show_sql/format_sql 
      mappingResources:指定实体映射文件 
      注1:本章采用将hibernate配置全部交给spring管理,因此项目中不再有hibernate.cfg.xml文件
    org.springframework.orm.hibernate5.HibernateTemplate
    org.springframework.orm.hibernate5.support.HibernateDaoSupport
  测试一:运行测试类Test1,测试hibernate与spring的集成

  spring-web
    org.springframework.web.context.ContextLoaderListener
      contextConfigLocation:classpath:applicationContext-*.xml
    org.springframework.web.context.support.WebApplicationContextUtils
  测试二:访问test2.jsp,测试spring与WEB项目的集成

  spring-aspects
    spring的AspectJ依赖,解析事务切点

1.3 struts2相关(2.5.13)

  struts2-core
  struts2-spring-plugin
    struts2与spring集成的插件
    将action配置到spring中,struts的action标签的class属性填写spring中bean的名字或id

1.4 log配置

1.4.1 log4j(1.X版)
      不建议使用
1.4.2 log4j2(2.9.1)
      log4j-core
      log4j-api
      log4j-web
      不建议使用
1.4.3 log4j2 + slf4j(使用ehcache开启hibernate二级缓存必须使用第二种方式配置日志)

注1:本章使用第三种方式配置日志,即log4j2 + slf4j

1.5 other

  junit(4.12)
  javax.servlet-api(4.0.0)

1.6 jstl

  jstl(1.2)
  standard(1.1.2)

1.7 jsp自定义标签依赖(必须与tomcat的版本一致)

  tomcat-jsp-api

注1:如何解决项目中不支持EL表达式的问题?将web.xml的DTD的版本由2.3升级到3.0即可。因为web2.3是不支持EL表达式的

2. SSH2集成

2.1 导入ehcache.xml

2.2 导入log4j2.xml

2.3 集成hibernate

2.3.1 注入数据库配置文件
2.3.2 配置c3p0连接池
2.3.3 注册LocalSessionFactoryBean
2.3.4 spring声明式事物

声明式事务配置

  • 1)必须先修改spring配置文件的声明部分,添加对aop标签和tx标签的支持

  • 2)配置SessionFactory(spring和hibernate集成时已完成)

  • 3)配置事务管理器

       HibernateTransactionManager
    
  • 4)配置事务的传播特性(tx)

     	add
     	edit
     	del
     	load|list
     事务传播特性(PROPAGATION_REQUIRED|readOnly)
    
  • 5)配置自动代理

a) 引用环绕通知txAdvice

b) 定义一个切入点
execution(* *…Biz.(…))
a:返回值不限 b:包名不限 c:接口名以Biz结尾 d:方法名及参数不限

c) 自动代理的原理
在spring上下文初始化完成以后,自动代理会逐个检查spring上下文中JavaBean实现的接口是否满足自动代理的条件,如果满足条件,则将此bean和通知结合生成一个代理对象,并以此代理对象替换spring上下文中的bean,之后你访问的就是代理对象了

2.3.5 注册HibernateTemplate
2.3.6 注册Base模块

3. 程序代码的分层(base模块)

/base
/action
/biz
/dao
/entity
/book
/action
/biz
/dao
/entity

4. 整合案例演示

4.1 entity

    *.hbm.xml

4.2 dao

    IXxxDAO
     XxxDAOImpl(继承HibernateDaoSupport类,方便注入HibernateTemplate)
    applicationContext-Xxx.xml

4.3 biz

    IXxxBiz
     XxxBizImpl
    applicationContext-Xxx.xml

4.4 test(junit4)

4.5 action

    将action配置到applicationContext-Xxx.xml,
    注:必须为多例模式(重要)

struts.xml配置注意事项:
1)

<!-- 将action创建交由spring容器来管理 -->
  <constant name="struts.objectFactory" value="spring"></constant>

2)struts-Xxx.xml文件中的action的class属性类型填写spring中的id。

5. web.xml配置

5.1 Spring上下文ApplicationContext.xml的加载

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext.xml</param-value>
  </context-param>

5.2 启动Web容器时,自动装配ApplicationContext.xml的配置信息

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

5.3 中文乱码过滤器

 <filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<async-supported>true</async-supported>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
  </filter>
  <filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>

5.4 其他配置

5.4.1 防止内存泄露、缓存清除监听器
   <listener>
	<listener-class>
	    org.springframework.web.util.IntrospectorCleanupListener
	</listener-class>
     </listener>

5.4.2 用于支持3种Bean的作用域:request,session和globalSession

 <listener>
<listener-class>			org.springframework.web.context.request.RequestContextListener
</listener-class>
 </listener>

5.4.3 把session的关闭延迟到jsp页面显示之后,请配在struts2上面

   <filter>
	<filter-name>OpenSessionInView</filter-name>
	<filter-class>		org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
	</filter-class>
     </filter>
     <filter-mapping>
	<filter-name>OpenSessionInView</filter-name>
	<url-pattern>/*</url-pattern>
     </filter-mapping>

5.5 Struts2核心过滤器

6.全部步骤:

1.创建BaseDao抽象类,继承HibernateDaoSupport
2.创建BaseBiz抽象类
3.创建BaseAction抽象类,实现ServletRequestAware和ResponseAware 接口
 3.1 重写req和resp方法(方法主体暂不处理)
4.spring和hibernate集成配置文档中配置分包分模块
<bean id="baseDao" class="BaseDao完整路径" abstract="true">
	//注入注册的hibernateTemplate
	<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
<bean id="baseBiz" class="BaseBiz完整路径" abstract="true"></bean>
<bean id="baseAction" class="BaseAction完整路径" abstract="true"></bean>
5.创建数据库表实体类及映射文件
6.创建实体类Dao类的接口
	6.1定义增删改查方法
7.创建实体类Dao接口的实现类,继承BaseDao
8.创建Biz接口类(跨Dao类调用Dao类方法)
9.创建Biz接口实现类继承BaseBiz
	//DI:依赖注入,将Dao层注入到Biz层
	定义私有的Dao接口对象,并设置get,set方法
	利用Dao接口对象调用相应方法。
10.创建实体类相关的ApplicationContext配置文件
<!-- 注册BookDao -->
	<bean id="booDao" 
		  class="BookDaoImpl完整路径"
		  parent="baseDao">
	</bean>
	<!-- 注册BookBiz -->
	<bean id="bookBiz" 
		  class="BookBizImpl完整路径"
		  parent="baseBiz">
		  <property name="bookDao" ref="booDao"/>
	</bean>
	<!-- 注册BookAction -->
11.创建spring主配置文件,并引入集成配置文件和实体类配置文件(注意顺序)
<import resource="集成配置文件名"/>
<import resource="实体类配置文件名"/>
12.创建测试类
	定义私有Biz对象
	定义私有实体类对象
	setUp方法中获取主配置文档的ApplicationContext对象
	利用上下文对象的getBean方法获得Biz的Bean
	实例化实体类

public void setUp() throws Exception {
		ApplicationContext ac = 
				new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		bookBiz=(IBookBiz) ac.getBean("bookBiz");
		book=new Book();
}

public class BookDaoImpl extends BaseDao implements IBookDao {

	@Override
	public void addBook(Book book) {
		this.getHibernateTemplate().save(book);
	}

	@Override
	public void editBook(Book book) {
		Book b = this.getHibernateTemplate().get(Book.class, book.getId());
		if(null!=b) {
			b.setBookName(book.getBookName());
			b.setPrice(book.getPrice());
			b.setBookType(book.getBookType());
			this.getHibernateTemplate().update(b);
		}
	}

	@Override
	public void delBook(Book book) {
		Book b = this.getHibernateTemplate().get(Book.class, book.getId());
		if(null!=b) {
			this.getHibernateTemplate().delete(b);
		}

	}

	@Override
	public Book get(Book book) {
		return this.getHibernateTemplate().get(Book.class, book.getId());
	}

	@Override
	public List<Book> queryBookPage(Book book, PageBean pageBean) {
		return this.getHibernateTemplate().execute(new HibernateCallback<List<Book>>() {

			@Override
			public List<Book> doInHibernate(Session session) throws HibernateException {
				String hql="from Book";
				Query<Book> query = session.createQuery(hql,Book.class);
				query.setFirstResult(pageBean.getStartIndex());
				query.setMaxResults(pageBean.getRows());
				return query.list();
			}
		});
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值